"use strict"; (self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-picker_es_index_js"],{ /***/ "../../../node_modules/rc-picker/es/PickerInput/Popup/Footer.js": /*!**********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Popup/Footer.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/useTimeInfo */ "../../../node_modules/rc-picker/es/hooks/useTimeInfo.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); function Footer(props) { var mode = props.mode, internalMode = props.internalMode, renderExtraFooter = props.renderExtraFooter, showNow = props.showNow, showTime = props.showTime, onSubmit = props.onSubmit, onNow = props.onNow, invalid = props.invalid, needConfirm = props.needConfirm, generateConfig = props.generateConfig, disabledDate = props.disabledDate; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context__WEBPACK_IMPORTED_MODULE_4__["default"]), prefixCls = _React$useContext.prefixCls, locale = _React$useContext.locale, _React$useContext$but = _React$useContext.button, Button = _React$useContext$but === void 0 ? 'button' : _React$useContext$but; // >>> Now var now = generateConfig.getNow(); var _useTimeInfo = (0,_hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__["default"])(generateConfig, showTime, now), _useTimeInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useTimeInfo, 1), getValidTime = _useTimeInfo2[0]; // ======================== Extra ========================= var extraNode = renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter(mode); // ======================== Ranges ======================== var nowDisabled = disabledDate(now, { type: mode }); var onInternalNow = function onInternalNow() { if (!nowDisabled) { var validateNow = getValidTime(now); onNow(validateNow); } }; var nowPrefixCls = "".concat(prefixCls, "-now"); var nowBtnPrefixCls = "".concat(nowPrefixCls, "-btn"); var presetNode = showNow && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("li", { className: nowPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("a", { className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(nowBtnPrefixCls, nowDisabled && "".concat(nowBtnPrefixCls, "-disabled")), "aria-disabled": nowDisabled, onClick: onInternalNow }, internalMode === 'date' ? locale.today : locale.now)); // >>> OK var okNode = needConfirm && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("li", { className: "".concat(prefixCls, "-ok") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(Button, { disabled: invalid, onClick: onSubmit }, locale.ok)); var rangeNode = (presetNode || okNode) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("ul", { className: "".concat(prefixCls, "-ranges") }, presetNode, okNode); // ======================== Render ======================== if (!extraNode && !rangeNode) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: "".concat(prefixCls, "-footer") }, extraNode && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: "".concat(prefixCls, "-footer-extra") }, extraNode), rangeNode); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Popup/PopupPanel.js": /*!**************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Popup/PopupPanel.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PopupPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _PickerPanel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../PickerPanel */ "../../../node_modules/rc-picker/es/PickerPanel/index.js"); /* harmony import */ var _PickerPanel_context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../PickerPanel/context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _hooks_useRangePickerValue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../hooks/useRangePickerValue */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js"); function PopupPanel(props) { var picker = props.picker, multiplePanel = props.multiplePanel, pickerValue = props.pickerValue, onPickerValueChange = props.onPickerValueChange, needConfirm = props.needConfirm, onSubmit = props.onSubmit, range = props.range, hoverValue = props.hoverValue; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context__WEBPACK_IMPORTED_MODULE_5__["default"]), prefixCls = _React$useContext.prefixCls, generateConfig = _React$useContext.generateConfig; // ======================== Offset ======================== var internalOffsetDate = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(function (date, offset) { return (0,_hooks_useRangePickerValue__WEBPACK_IMPORTED_MODULE_6__.offsetPanelDate)(generateConfig, picker, date, offset); }, [generateConfig, picker]); var nextPickerValue = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return internalOffsetDate(pickerValue, 1); }, [pickerValue, internalOffsetDate]); // Outside var onSecondPickerValueChange = function onSecondPickerValueChange(nextDate) { onPickerValueChange(internalOffsetDate(nextDate, -1)); }; // ======================= Context ======================== var sharedContext = { onCellDblClick: function onCellDblClick() { if (needConfirm) { onSubmit(); } } }; var hideHeader = picker === 'time'; // ======================== Props ========================= var pickerProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props), {}, { hoverValue: null, hoverRangeValue: null, hideHeader: hideHeader }); if (range) { pickerProps.hoverRangeValue = hoverValue; } else { pickerProps.hoverValue = hoverValue; } // ======================== Render ======================== // Multiple if (multiplePanel) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: "".concat(prefixCls, "-panels") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PickerPanel_context__WEBPACK_IMPORTED_MODULE_4__.PickerHackContext.Provider, { value: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, sharedContext), {}, { hideNext: true }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PickerPanel__WEBPACK_IMPORTED_MODULE_3__["default"], pickerProps)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PickerPanel_context__WEBPACK_IMPORTED_MODULE_4__.PickerHackContext.Provider, { value: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, sharedContext), {}, { hidePrev: true }) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PickerPanel__WEBPACK_IMPORTED_MODULE_3__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, pickerProps, { pickerValue: nextPickerValue, onPickerValueChange: onSecondPickerValueChange })))); } // Single return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PickerPanel_context__WEBPACK_IMPORTED_MODULE_4__.PickerHackContext.Provider, { value: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, sharedContext) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PickerPanel__WEBPACK_IMPORTED_MODULE_3__["default"], pickerProps)); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Popup/PresetPanel.js": /*!***************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Popup/PresetPanel.js ***! \***************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PresetPanel) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); function executeValue(value) { return typeof value === 'function' ? value() : value; } function PresetPanel(props) { var prefixCls = props.prefixCls, presets = props.presets, _onClick = props.onClick, onHover = props.onHover; if (!presets.length) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "".concat(prefixCls, "-presets") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("ul", null, presets.map(function (_ref, index) { var label = _ref.label, value = _ref.value; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("li", { key: index, onClick: function onClick() { _onClick(executeValue(value)); }, onMouseEnter: function onMouseEnter() { onHover(executeValue(value)); }, onMouseLeave: function onMouseLeave() { onHover(null); } }, label); }))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Popup/index.js": /*!*********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Popup/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Popup) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var rc_resize_observer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-resize-observer */ "../../../node_modules/rc-resize-observer/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _Footer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Footer */ "../../../node_modules/rc-picker/es/PickerInput/Popup/Footer.js"); /* harmony import */ var _PopupPanel__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./PopupPanel */ "../../../node_modules/rc-picker/es/PickerInput/Popup/PopupPanel.js"); /* harmony import */ var _PresetPanel__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./PresetPanel */ "../../../node_modules/rc-picker/es/PickerInput/Popup/PresetPanel.js"); function Popup(props) { var panelRender = props.panelRender, internalMode = props.internalMode, picker = props.picker, showNow = props.showNow, range = props.range, multiple = props.multiple, _props$activeInfo = props.activeInfo, activeInfo = _props$activeInfo === void 0 ? [0, 0, 0] : _props$activeInfo, presets = props.presets, onPresetHover = props.onPresetHover, onPresetSubmit = props.onPresetSubmit, onFocus = props.onFocus, onBlur = props.onBlur, onPanelMouseDown = props.onPanelMouseDown, direction = props.direction, value = props.value, onSelect = props.onSelect, isInvalid = props.isInvalid, defaultOpenValue = props.defaultOpenValue, onOk = props.onOk, onSubmit = props.onSubmit; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_5__.useContext(_context__WEBPACK_IMPORTED_MODULE_7__["default"]), prefixCls = _React$useContext.prefixCls; var panelPrefixCls = "".concat(prefixCls, "-panel"); var rtl = direction === 'rtl'; // ========================= Refs ========================= var arrowRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(null); var wrapperRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(null); // ======================== Offset ======================== var _React$useState = react__WEBPACK_IMPORTED_MODULE_5__.useState(0), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2), containerWidth = _React$useState2[0], setContainerWidth = _React$useState2[1]; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_5__.useState(0), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState3, 2), containerOffset = _React$useState4[0], setContainerOffset = _React$useState4[1]; var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_5__.useState(0), _React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState5, 2), arrowOffset = _React$useState6[0], setArrowOffset = _React$useState6[1]; var onResize = function onResize(info) { if (info.width) { setContainerWidth(info.width); } }; var _activeInfo = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(activeInfo, 3), activeInputLeft = _activeInfo[0], activeInputRight = _activeInfo[1], selectorWidth = _activeInfo[2]; var _React$useState7 = react__WEBPACK_IMPORTED_MODULE_5__.useState(0), _React$useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState7, 2), retryTimes = _React$useState8[0], setRetryTimes = _React$useState8[1]; react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () { setRetryTimes(10); }, [activeInputLeft]); react__WEBPACK_IMPORTED_MODULE_5__.useEffect(function () { // `activeOffset` is always align with the active input element // So we need only check container contains the `activeOffset` if (range && wrapperRef.current) { var _arrowRef$current; // Offset in case container has border radius var arrowWidth = ((_arrowRef$current = arrowRef.current) === null || _arrowRef$current === void 0 ? void 0 : _arrowRef$current.offsetWidth) || 0; // Arrow Offset var wrapperRect = wrapperRef.current.getBoundingClientRect(); if (!wrapperRect.height || wrapperRect.right < 0) { setRetryTimes(function (times) { return Math.max(0, times - 1); }); return; } var nextArrowOffset = (rtl ? activeInputRight - arrowWidth : activeInputLeft) - wrapperRect.left; setArrowOffset(nextArrowOffset); // Container Offset if (containerWidth && containerWidth < selectorWidth) { var offset = rtl ? wrapperRect.right - (activeInputRight - arrowWidth + containerWidth) : activeInputLeft + arrowWidth - wrapperRect.left - containerWidth; var safeOffset = Math.max(0, offset); setContainerOffset(safeOffset); } else { setContainerOffset(0); } } }, [retryTimes, rtl, containerWidth, activeInputLeft, activeInputRight, selectorWidth, range]); // ======================== Custom ======================== function filterEmpty(list) { return list.filter(function (item) { return item; }); } var valueList = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () { return filterEmpty((0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_6__.toArray)(value)); }, [value]); var isTimePickerEmptyValue = picker === 'time' && !valueList.length; var footerSubmitValue = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () { if (isTimePickerEmptyValue) { return filterEmpty([defaultOpenValue]); } return valueList; }, [isTimePickerEmptyValue, valueList, defaultOpenValue]); var popupPanelValue = isTimePickerEmptyValue ? defaultOpenValue : valueList; var disableSubmit = react__WEBPACK_IMPORTED_MODULE_5__.useMemo(function () { // Empty is invalid if (!footerSubmitValue.length) { return true; } return footerSubmitValue.some(function (val) { return isInvalid(val); }); }, [footerSubmitValue, isInvalid]); var onFooterSubmit = function onFooterSubmit() { // For TimePicker, we will additional trigger the value update if (isTimePickerEmptyValue) { onSelect(defaultOpenValue); } onOk(); onSubmit(); }; var mergedNodes = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", { className: "".concat(prefixCls, "-panel-layout") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_PresetPanel__WEBPACK_IMPORTED_MODULE_10__["default"], { prefixCls: prefixCls, presets: presets, onClick: onPresetSubmit, onHover: onPresetHover }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_PopupPanel__WEBPACK_IMPORTED_MODULE_9__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props, { value: popupPanelValue })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(_Footer__WEBPACK_IMPORTED_MODULE_8__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props, { showNow: multiple ? false : showNow, invalid: disableSubmit, onSubmit: onFooterSubmit })))); if (panelRender) { mergedNodes = panelRender(mergedNodes); } // ======================== Render ======================== var containerPrefixCls = "".concat(panelPrefixCls, "-container"); var marginLeft = 'marginLeft'; var marginRight = 'marginRight'; // Container var renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", { onMouseDown: onPanelMouseDown, tabIndex: -1, className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(containerPrefixCls, // Used for Today Button style, safe to remove if no need "".concat(prefixCls, "-").concat(internalMode, "-panel-container")), style: (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, rtl ? marginRight : marginLeft, containerOffset), rtl ? marginLeft : marginRight, 'auto') // Still wish not to lose focus on mouse down // onMouseDown={(e) => { // // e.preventDefault(); // }} , onFocus: onFocus, onBlur: onBlur }, mergedNodes); if (range) { renderNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", { onMouseDown: onPanelMouseDown, ref: wrapperRef, className: classnames__WEBPACK_IMPORTED_MODULE_3___default()("".concat(prefixCls, "-range-wrapper"), "".concat(prefixCls, "-").concat(picker, "-range-wrapper")) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", { ref: arrowRef, className: "".concat(prefixCls, "-range-arrow"), style: { left: arrowOffset } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement(rc_resize_observer__WEBPACK_IMPORTED_MODULE_4__["default"], { onResize: onResize }, renderNode)); } return renderNode; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/RangePicker.js": /*!*********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/RangePicker.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js"); /* harmony import */ var rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/pickAttrs */ "../../../node_modules/rc-util/es/pickAttrs.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _PickerTrigger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../PickerTrigger */ "../../../node_modules/rc-picker/es/PickerTrigger/index.js"); /* harmony import */ var _PickerTrigger_util__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../PickerTrigger/util */ "../../../node_modules/rc-picker/es/PickerTrigger/util.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _hooks_useCellRender__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hooks/useCellRender */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js"); /* harmony import */ var _hooks_useFieldsInvalidate__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hooks/useFieldsInvalidate */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldsInvalidate.js"); /* harmony import */ var _hooks_useFilledProps__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./hooks/useFilledProps */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFilledProps.js"); /* harmony import */ var _hooks_useOpen__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hooks/useOpen */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useOpen.js"); /* harmony import */ var _hooks_usePickerRef__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./hooks/usePickerRef */ "../../../node_modules/rc-picker/es/PickerInput/hooks/usePickerRef.js"); /* harmony import */ var _hooks_usePresets__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./hooks/usePresets */ "../../../node_modules/rc-picker/es/PickerInput/hooks/usePresets.js"); /* harmony import */ var _hooks_useRangeActive__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useRangeActive */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeActive.js"); /* harmony import */ var _hooks_useRangeDisabledDate__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./hooks/useRangeDisabledDate */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeDisabledDate.js"); /* harmony import */ var _hooks_useRangePickerValue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./hooks/useRangePickerValue */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js"); /* harmony import */ var _hooks_useRangeValue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./hooks/useRangeValue */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeValue.js"); /* harmony import */ var _hooks_useShowNow__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./hooks/useShowNow */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useShowNow.js"); /* harmony import */ var _Popup__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./Popup */ "../../../node_modules/rc-picker/es/PickerInput/Popup/index.js"); /* harmony import */ var _Selector_RangeSelector__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./Selector/RangeSelector */ "../../../node_modules/rc-picker/es/PickerInput/Selector/RangeSelector.js"); function separateConfig(config, defaultConfig) { var singleConfig = config !== null && config !== void 0 ? config : defaultConfig; if (Array.isArray(singleConfig)) { return singleConfig; } return [singleConfig, singleConfig]; } /** Used for change event, it should always be not undefined */ function getActiveRange(activeIndex) { return activeIndex === 1 ? 'end' : 'start'; } function RangePicker(props, ref) { // ========================= Prop ========================= var _useFilledProps = (0,_hooks_useFilledProps__WEBPACK_IMPORTED_MODULE_16__["default"])(props, function () { var disabled = props.disabled, allowEmpty = props.allowEmpty; var mergedDisabled = separateConfig(disabled, false); var mergedAllowEmpty = separateConfig(allowEmpty, false); return { disabled: mergedDisabled, allowEmpty: mergedAllowEmpty }; }), _useFilledProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useFilledProps, 6), filledProps = _useFilledProps2[0], internalPicker = _useFilledProps2[1], complexPicker = _useFilledProps2[2], formatList = _useFilledProps2[3], maskFormat = _useFilledProps2[4], isInvalidateDate = _useFilledProps2[5]; var prefixCls = filledProps.prefixCls, styles = filledProps.styles, classNames = filledProps.classNames, defaultValue = filledProps.defaultValue, value = filledProps.value, needConfirm = filledProps.needConfirm, onKeyDown = filledProps.onKeyDown, disabled = filledProps.disabled, allowEmpty = filledProps.allowEmpty, disabledDate = filledProps.disabledDate, minDate = filledProps.minDate, maxDate = filledProps.maxDate, defaultOpen = filledProps.defaultOpen, open = filledProps.open, onOpenChange = filledProps.onOpenChange, locale = filledProps.locale, generateConfig = filledProps.generateConfig, picker = filledProps.picker, showNow = filledProps.showNow, showToday = filledProps.showToday, showTime = filledProps.showTime, mode = filledProps.mode, onPanelChange = filledProps.onPanelChange, onCalendarChange = filledProps.onCalendarChange, onOk = filledProps.onOk, defaultPickerValue = filledProps.defaultPickerValue, pickerValue = filledProps.pickerValue, onPickerValueChange = filledProps.onPickerValueChange, inputReadOnly = filledProps.inputReadOnly, suffixIcon = filledProps.suffixIcon, onFocus = filledProps.onFocus, onBlur = filledProps.onBlur, presets = filledProps.presets, ranges = filledProps.ranges, components = filledProps.components, cellRender = filledProps.cellRender, dateRender = filledProps.dateRender, monthCellRender = filledProps.monthCellRender, onClick = filledProps.onClick; // ========================= Refs ========================= var selectorRef = (0,_hooks_usePickerRef__WEBPACK_IMPORTED_MODULE_18__["default"])(ref); // ========================= Open ========================= var _useOpen = (0,_hooks_useOpen__WEBPACK_IMPORTED_MODULE_17__["default"])(open, defaultOpen, disabled, onOpenChange), _useOpen2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useOpen, 2), mergedOpen = _useOpen2[0], setMergeOpen = _useOpen2[1]; var triggerOpen = function triggerOpen(nextOpen, config) { // No need to open if all disabled if (disabled.some(function (fieldDisabled) { return !fieldDisabled; }) || !nextOpen) { setMergeOpen(nextOpen, config); } }; // ======================== Values ======================== var _useInnerValue = (0,_hooks_useRangeValue__WEBPACK_IMPORTED_MODULE_23__.useInnerValue)(generateConfig, locale, formatList, true, false, defaultValue, value, onCalendarChange, onOk), _useInnerValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useInnerValue, 5), mergedValue = _useInnerValue2[0], setInnerValue = _useInnerValue2[1], getCalendarValue = _useInnerValue2[2], triggerCalendarChange = _useInnerValue2[3], triggerOk = _useInnerValue2[4]; var calendarValue = getCalendarValue(); // ======================== Active ======================== var _useRangeActive = (0,_hooks_useRangeActive__WEBPACK_IMPORTED_MODULE_20__["default"])(disabled, allowEmpty, mergedOpen), _useRangeActive2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useRangeActive, 9), focused = _useRangeActive2[0], triggerFocus = _useRangeActive2[1], lastOperation = _useRangeActive2[2], activeIndex = _useRangeActive2[3], setActiveIndex = _useRangeActive2[4], nextActiveIndex = _useRangeActive2[5], activeIndexList = _useRangeActive2[6], updateSubmitIndex = _useRangeActive2[7], hasActiveSubmitValue = _useRangeActive2[8]; var onSharedFocus = function onSharedFocus(event, index) { triggerFocus(true); onFocus === null || onFocus === void 0 || onFocus(event, { range: getActiveRange(index !== null && index !== void 0 ? index : activeIndex) }); }; var onSharedBlur = function onSharedBlur(event, index) { triggerFocus(false); onBlur === null || onBlur === void 0 || onBlur(event, { range: getActiveRange(index !== null && index !== void 0 ? index : activeIndex) }); }; // ======================= ShowTime ======================= /** Used for Popup panel */ var mergedShowTime = react__WEBPACK_IMPORTED_MODULE_9__.useMemo(function () { if (!showTime) { return null; } var disabledTime = showTime.disabledTime; var proxyDisabledTime = disabledTime ? function (date) { var range = getActiveRange(activeIndex); var fromDate = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__.getFromDate)(calendarValue, activeIndexList, activeIndex); return disabledTime(date, range, { from: fromDate }); } : undefined; return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, showTime), {}, { disabledTime: proxyDisabledTime }); }, [showTime, activeIndex, calendarValue, activeIndexList]); // ========================= Mode ========================= var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_4__.useMergedState)([picker, picker], { value: mode }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useMergedState, 2), modes = _useMergedState2[0], setModes = _useMergedState2[1]; var mergedMode = modes[activeIndex] || picker; /** Extends from `mergedMode` to patch `datetime` mode */ var internalMode = mergedMode === 'date' && mergedShowTime ? 'datetime' : mergedMode; // ====================== PanelCount ====================== var multiplePanel = internalMode === picker && internalMode !== 'time'; // ======================= Show Now ======================= var mergedShowNow = (0,_hooks_useShowNow__WEBPACK_IMPORTED_MODULE_24__["default"])(picker, mergedMode, showNow, showToday, true); // ======================== Value ========================= var _useRangeValue = (0,_hooks_useRangeValue__WEBPACK_IMPORTED_MODULE_23__["default"])(filledProps, mergedValue, setInnerValue, getCalendarValue, triggerCalendarChange, disabled, formatList, focused, mergedOpen, isInvalidateDate), _useRangeValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useRangeValue, 2), /** Trigger `onChange` by check `disabledDate` */ flushSubmit = _useRangeValue2[0], /** Trigger `onChange` directly without check `disabledDate` */ triggerSubmitChange = _useRangeValue2[1]; // ===================== DisabledDate ===================== var mergedDisabledDate = (0,_hooks_useRangeDisabledDate__WEBPACK_IMPORTED_MODULE_21__["default"])(calendarValue, disabled, activeIndexList, generateConfig, locale, disabledDate); // ======================= Validate ======================= var _useFieldsInvalidate = (0,_hooks_useFieldsInvalidate__WEBPACK_IMPORTED_MODULE_15__["default"])(calendarValue, isInvalidateDate, allowEmpty), _useFieldsInvalidate2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useFieldsInvalidate, 2), submitInvalidates = _useFieldsInvalidate2[0], onSelectorInvalid = _useFieldsInvalidate2[1]; // ===================== Picker Value ===================== var _useRangePickerValue = (0,_hooks_useRangePickerValue__WEBPACK_IMPORTED_MODULE_22__["default"])(generateConfig, locale, calendarValue, modes, mergedOpen, activeIndex, internalPicker, multiplePanel, defaultPickerValue, pickerValue, mergedShowTime === null || mergedShowTime === void 0 ? void 0 : mergedShowTime.defaultOpenValue, onPickerValueChange, minDate, maxDate), _useRangePickerValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useRangePickerValue, 2), currentPickerValue = _useRangePickerValue2[0], setCurrentPickerValue = _useRangePickerValue2[1]; // >>> Mode need wait for `pickerValue` var triggerModeChange = (0,rc_util__WEBPACK_IMPORTED_MODULE_4__.useEvent)(function (nextPickerValue, nextMode, triggerEvent) { var clone = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__.fillIndex)(modes, activeIndex, nextMode); if (clone[0] !== modes[0] || clone[1] !== modes[1]) { setModes(clone); } // Compatible with `onPanelChange` if (onPanelChange && triggerEvent !== false) { var clonePickerValue = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(calendarValue); if (nextPickerValue) { clonePickerValue[activeIndex] = nextPickerValue; } onPanelChange(clonePickerValue, clone); } }); // ======================== Change ======================== var fillCalendarValue = function fillCalendarValue(date, index) { return ( // Trigger change only when date changed (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__.fillIndex)(calendarValue, index, date) ); }; // ======================== Submit ======================== /** * Trigger by confirm operation. * This function has already handle the `needConfirm` check logic. * - Selector: enter key * - Panel: OK button */ var triggerPartConfirm = function triggerPartConfirm(date, skipFocus) { var nextValue = calendarValue; if (date) { nextValue = fillCalendarValue(date, activeIndex); } updateSubmitIndex(activeIndex); // Get next focus index var nextIndex = nextActiveIndex(nextValue); // Change calendar value and tell flush it triggerCalendarChange(nextValue); flushSubmit(activeIndex, nextIndex === null); if (nextIndex === null) { triggerOpen(false, { force: true }); } else if (!skipFocus) { selectorRef.current.focus({ index: nextIndex }); } }; // ======================== Click ========================= var onSelectorClick = function onSelectorClick(event) { var _activeElement; var rootNode = event.target.getRootNode(); if (!selectorRef.current.nativeElement.contains((_activeElement = rootNode.activeElement) !== null && _activeElement !== void 0 ? _activeElement : document.activeElement)) { // Click to focus the enabled input var enabledIndex = disabled.findIndex(function (d) { return !d; }); if (enabledIndex >= 0) { selectorRef.current.focus({ index: enabledIndex }); } } triggerOpen(true); onClick === null || onClick === void 0 || onClick(event); }; var onSelectorClear = function onSelectorClear() { triggerSubmitChange(null); triggerOpen(false, { force: true }); }; // ======================== Hover ========================= var _React$useState = react__WEBPACK_IMPORTED_MODULE_9__.useState(null), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), hoverSource = _React$useState2[0], setHoverSource = _React$useState2[1]; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_9__.useState(null), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2), internalHoverValues = _React$useState4[0], setInternalHoverValues = _React$useState4[1]; var hoverValues = react__WEBPACK_IMPORTED_MODULE_9__.useMemo(function () { return internalHoverValues || calendarValue; }, [calendarValue, internalHoverValues]); // Clean up `internalHoverValues` when closed react__WEBPACK_IMPORTED_MODULE_9__.useEffect(function () { if (!mergedOpen) { setInternalHoverValues(null); } }, [mergedOpen]); // ======================================================== // == Panels == // ======================================================== // Save the offset with active bar position // const [activeOffset, setActiveOffset] = React.useState(0); var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_9__.useState([0, 0, 0]), _React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState5, 2), activeInfo = _React$useState6[0], setActiveInfo = _React$useState6[1]; // ======================= Presets ======================== var presetList = (0,_hooks_usePresets__WEBPACK_IMPORTED_MODULE_19__["default"])(presets, ranges); var onPresetHover = function onPresetHover(nextValues) { setInternalHoverValues(nextValues); setHoverSource('preset'); }; var onPresetSubmit = function onPresetSubmit(nextValues) { var passed = triggerSubmitChange(nextValues); if (passed) { triggerOpen(false, { force: true }); } }; var onNow = function onNow(now) { triggerPartConfirm(now); }; // ======================== Panel ========================= var onPanelHover = function onPanelHover(date) { setInternalHoverValues(date ? fillCalendarValue(date, activeIndex) : null); setHoverSource('cell'); }; // >>> Focus var onPanelFocus = function onPanelFocus(event) { triggerOpen(true); onSharedFocus(event); }; // >>> MouseDown var onPanelMouseDown = function onPanelMouseDown() { lastOperation('panel'); }; // >>> Calendar var onPanelSelect = function onPanelSelect(date) { var clone = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__.fillIndex)(calendarValue, activeIndex, date); // Only trigger calendar event but not update internal `calendarValue` state triggerCalendarChange(clone); // >>> Trigger next active if !needConfirm // Fully logic check `useRangeValue` hook if (!needConfirm && !complexPicker && internalPicker === internalMode) { triggerPartConfirm(date); } }; // >>> Close var onPopupClose = function onPopupClose() { // Close popup triggerOpen(false); }; // >>> cellRender var onInternalCellRender = (0,_hooks_useCellRender__WEBPACK_IMPORTED_MODULE_14__["default"])(cellRender, dateRender, monthCellRender, getActiveRange(activeIndex)); // >>> Value var panelValue = calendarValue[activeIndex] || null; // >>> invalid var isPopupInvalidateDate = (0,rc_util__WEBPACK_IMPORTED_MODULE_4__.useEvent)(function (date) { return isInvalidateDate(date, { activeIndex: activeIndex }); }); var panelProps = react__WEBPACK_IMPORTED_MODULE_9__.useMemo(function () { var domProps = (0,rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__["default"])(filledProps, false); var restProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_6__["default"])(filledProps, [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(Object.keys(domProps)), ['onChange', 'onCalendarChange', 'style', 'className', 'onPanelChange', 'disabledTime'])); return restProps; }, [filledProps]); // >>> Render var panel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Popup__WEBPACK_IMPORTED_MODULE_25__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, panelProps, { showNow: mergedShowNow, showTime: mergedShowTime // Range , range: true, multiplePanel: multiplePanel, activeInfo: activeInfo // Disabled , disabledDate: mergedDisabledDate // Focus , onFocus: onPanelFocus, onBlur: onSharedBlur, onPanelMouseDown: onPanelMouseDown // Mode , picker: picker, mode: mergedMode, internalMode: internalMode, onPanelChange: triggerModeChange // Value , format: maskFormat, value: panelValue, isInvalid: isPopupInvalidateDate, onChange: null, onSelect: onPanelSelect // PickerValue , pickerValue: currentPickerValue, defaultOpenValue: (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__.toArray)(showTime === null || showTime === void 0 ? void 0 : showTime.defaultOpenValue)[activeIndex], onPickerValueChange: setCurrentPickerValue // Hover , hoverValue: hoverValues, onHover: onPanelHover // Submit , needConfirm: needConfirm, onSubmit: triggerPartConfirm, onOk: triggerOk // Preset , presets: presetList, onPresetHover: onPresetHover, onPresetSubmit: onPresetSubmit // Now , onNow: onNow // Render , cellRender: onInternalCellRender })); // ======================================================== // == Selector == // ======================================================== // ======================== Change ======================== var onSelectorChange = function onSelectorChange(date, index) { var clone = fillCalendarValue(date, index); triggerCalendarChange(clone); }; var onSelectorInputChange = function onSelectorInputChange() { lastOperation('input'); }; // ======================= Selector ======================= var onSelectorFocus = function onSelectorFocus(event, index) { // Check if `needConfirm` but user not submit yet var activeListLen = activeIndexList.length; var lastActiveIndex = activeIndexList[activeListLen - 1]; if (activeListLen && lastActiveIndex !== index && needConfirm && // Not change index if is not filled !allowEmpty[lastActiveIndex] && !hasActiveSubmitValue(lastActiveIndex) && calendarValue[lastActiveIndex]) { selectorRef.current.focus({ index: lastActiveIndex }); return; } lastOperation('input'); triggerOpen(true, { inherit: true }); // When click input to switch the field, it will not trigger close. // Which means it will lose the part confirm and we need fill back. // ref: https://github.com/ant-design/ant-design/issues/49512 if (activeIndex !== index && mergedOpen && !needConfirm && complexPicker) { triggerPartConfirm(null, true); } setActiveIndex(index); onSharedFocus(event, index); }; var onSelectorBlur = function onSelectorBlur(event, index) { triggerOpen(false); if (!needConfirm && lastOperation() === 'input') { var nextIndex = nextActiveIndex(calendarValue); flushSubmit(activeIndex, nextIndex === null); } onSharedBlur(event, index); }; var onSelectorKeyDown = function onSelectorKeyDown(event, preventDefault) { if (event.key === 'Tab') { triggerPartConfirm(null, true); } onKeyDown === null || onKeyDown === void 0 || onKeyDown(event, preventDefault); }; // ======================= Context ======================== var context = react__WEBPACK_IMPORTED_MODULE_9__.useMemo(function () { return { prefixCls: prefixCls, locale: locale, generateConfig: generateConfig, button: components.button, input: components.input }; }, [prefixCls, locale, generateConfig, components.button, components.input]); // ======================== Effect ======================== // >>> Mode // Reset for every active (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_5__["default"])(function () { if (mergedOpen && activeIndex !== undefined) { // Legacy compatible. This effect update should not trigger `onPanelChange` triggerModeChange(null, picker, false); } }, [mergedOpen, activeIndex, picker]); // >>> For complex picker, we need check if need to focus next one (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_5__["default"])(function () { var lastOp = lastOperation(); // Trade as confirm on field leave if (!mergedOpen && lastOp === 'input') { triggerOpen(false); triggerPartConfirm(null, true); } // Submit with complex picker if (!mergedOpen && complexPicker && !needConfirm && lastOp === 'panel') { triggerOpen(true); triggerPartConfirm(); } }, [mergedOpen]); // ====================== DevWarning ====================== if (true) { var isIndexEmpty = function isIndexEmpty(index) { return ( // Value is empty !(value !== null && value !== void 0 && value[index]) && // DefaultValue is empty !(defaultValue !== null && defaultValue !== void 0 && defaultValue[index]) ); }; if (disabled.some(function (fieldDisabled, index) { return fieldDisabled && isIndexEmpty(index) && !allowEmpty[index]; })) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_8__["default"])(false, '`disabled` should not set with empty `value`. You should set `allowEmpty` or `value` instead.'); } } // ======================== Render ======================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_context__WEBPACK_IMPORTED_MODULE_13__["default"].Provider, { value: context }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_PickerTrigger__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, (0,_PickerTrigger_util__WEBPACK_IMPORTED_MODULE_11__.pickTriggerProps)(filledProps), { popupElement: panel, popupStyle: styles.popup, popupClassName: classNames.popup // Visible , visible: mergedOpen, onClose: onPopupClose // Range , range: true }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Selector_RangeSelector__WEBPACK_IMPORTED_MODULE_26__["default"] // Shared , (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, filledProps, { // Ref ref: selectorRef // Icon , suffixIcon: suffixIcon // Active , activeIndex: focused || mergedOpen ? activeIndex : null, activeHelp: !!internalHoverValues, allHelp: !!internalHoverValues && hoverSource === 'preset', focused: focused, onFocus: onSelectorFocus, onBlur: onSelectorBlur, onKeyDown: onSelectorKeyDown, onSubmit: triggerPartConfirm // Change , value: hoverValues, maskFormat: maskFormat, onChange: onSelectorChange, onInputChange: onSelectorInputChange // Format , format: formatList, inputReadOnly: inputReadOnly // Disabled , disabled: disabled // Open , open: mergedOpen, onOpenChange: triggerOpen // Click , onClick: onSelectorClick, onClear: onSelectorClear // Invalid , invalid: submitInvalidates, onInvalid: onSelectorInvalid // Offset , onActiveInfo: setActiveInfo })))); } var RefRangePicker = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.forwardRef(RangePicker); if (true) { RefRangePicker.displayName = 'RefRangePicker'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefRangePicker); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/Icon.js": /*!***********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/Icon.js ***! \***********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ClearIcon: () => (/* binding */ ClearIcon), /* harmony export */ "default": () => (/* binding */ Icon) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); var _excluded = ["icon", "type"], _excluded2 = ["onClear"]; function Icon(props) { var icon = props.icon, type = props.type, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded); var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context__WEBPACK_IMPORTED_MODULE_3__["default"]), prefixCls = _React$useContext.prefixCls; return icon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ className: "".concat(prefixCls, "-").concat(type) }, restProps), icon) : null; } function ClearIcon(_ref) { var onClear = _ref.onClear, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, _excluded2); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(Icon, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restProps, { type: "clear", role: "button", onMouseDown: function onMouseDown(e) { e.preventDefault(); }, onClick: function onClick(e) { e.stopPropagation(); onClear(); } })); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/Input.js": /*!************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/Input.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _hooks_useLockEffect__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../hooks/useLockEffect */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js"); /* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Icon */ "../../../node_modules/rc-picker/es/PickerInput/Selector/Icon.js"); /* harmony import */ var _MaskFormat__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./MaskFormat */ "../../../node_modules/rc-picker/es/PickerInput/Selector/MaskFormat.js"); /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./util */ "../../../node_modules/rc-picker/es/PickerInput/Selector/util.js"); var _excluded = ["active", "showActiveCls", "suffixIcon", "format", "validateFormat", "onChange", "onInput", "helped", "onHelp", "onSubmit", "onKeyDown", "preserveInvalidOnBlur", "invalid", "clearIcon"]; // Format logic // // First time on focus: // 1. check if the text is valid, if not fill with format // 2. set highlight cell to the first cell // Cells // 1. Selection the index cell, set inner `cacheValue` to '' // 2. Key input filter non-number char, patch after the `cacheValue` // 1. Replace the `cacheValue` with input align the cell length // 2. Re-selection the mask cell // 3. If `cacheValue` match the limit length or cell format (like 1 ~ 12 month), go to next cell var Input = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.forwardRef(function (props, ref) { var active = props.active, _props$showActiveCls = props.showActiveCls, showActiveCls = _props$showActiveCls === void 0 ? true : _props$showActiveCls, suffixIcon = props.suffixIcon, format = props.format, validateFormat = props.validateFormat, onChange = props.onChange, onInput = props.onInput, helped = props.helped, onHelp = props.onHelp, onSubmit = props.onSubmit, onKeyDown = props.onKeyDown, _props$preserveInvali = props.preserveInvalidOnBlur, preserveInvalidOnBlur = _props$preserveInvali === void 0 ? false : _props$preserveInvali, invalid = props.invalid, clearIcon = props.clearIcon, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(props, _excluded); var value = props.value, onFocus = props.onFocus, onBlur = props.onBlur, onMouseUp = props.onMouseUp; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_8__.useContext(_context__WEBPACK_IMPORTED_MODULE_10__["default"]), prefixCls = _React$useContext.prefixCls, _React$useContext$inp = _React$useContext.input, Component = _React$useContext$inp === void 0 ? 'input' : _React$useContext$inp; var inputPrefixCls = "".concat(prefixCls, "-input"); // ======================== Value ========================= var _React$useState = react__WEBPACK_IMPORTED_MODULE_8__.useState(false), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2), focused = _React$useState2[0], setFocused = _React$useState2[1]; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_8__.useState(value), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState3, 2), internalInputValue = _React$useState4[0], setInputValue = _React$useState4[1]; var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_8__.useState(''), _React$useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState5, 2), focusCellText = _React$useState6[0], setFocusCellText = _React$useState6[1]; var _React$useState7 = react__WEBPACK_IMPORTED_MODULE_8__.useState(null), _React$useState8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState7, 2), focusCellIndex = _React$useState8[0], setFocusCellIndex = _React$useState8[1]; var _React$useState9 = react__WEBPACK_IMPORTED_MODULE_8__.useState(null), _React$useState10 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState9, 2), forceSelectionSyncMark = _React$useState10[0], forceSelectionSync = _React$useState10[1]; var inputValue = internalInputValue || ''; // Sync value if needed react__WEBPACK_IMPORTED_MODULE_8__.useEffect(function () { setInputValue(value); }, [value]); // ========================= Refs ========================= var holderRef = react__WEBPACK_IMPORTED_MODULE_8__.useRef(); var inputRef = react__WEBPACK_IMPORTED_MODULE_8__.useRef(); react__WEBPACK_IMPORTED_MODULE_8__.useImperativeHandle(ref, function () { return { nativeElement: holderRef.current, inputElement: inputRef.current, focus: function focus(options) { inputRef.current.focus(options); }, blur: function blur() { inputRef.current.blur(); } }; }); // ======================== Format ======================== var maskFormat = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { return new _MaskFormat__WEBPACK_IMPORTED_MODULE_13__["default"](format || ''); }, [format]); var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { if (helped) { return [0, 0]; } return maskFormat.getSelection(focusCellIndex); }, [maskFormat, focusCellIndex, helped]), _React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useMemo, 2), selectionStart = _React$useMemo2[0], selectionEnd = _React$useMemo2[1]; // ======================== Modify ======================== // When input modify content, trigger `onHelp` if is not the format var onModify = function onModify(text) { if (text && text !== format && text !== value) { onHelp(); } }; // ======================== Change ======================== /** * Triggered by paste, keyDown and focus to show format */ var triggerInputChange = (0,rc_util__WEBPACK_IMPORTED_MODULE_5__.useEvent)(function (text) { if (validateFormat(text)) { onChange(text); } setInputValue(text); onModify(text); }); // Directly trigger `onChange` if `format` is empty var onInternalChange = function onInternalChange(event) { // Hack `onChange` with format to do nothing if (!format) { var text = event.target.value; onModify(text); setInputValue(text); onChange(text); } }; var onFormatPaste = function onFormatPaste(event) { // Get paste text var pasteText = event.clipboardData.getData('text'); if (validateFormat(pasteText)) { triggerInputChange(pasteText); } }; // ======================== Mouse ========================= // When `mouseDown` get focus, it's better to not to change the selection // Since the up position maybe not is the first cell var mouseDownRef = react__WEBPACK_IMPORTED_MODULE_8__.useRef(false); var onFormatMouseDown = function onFormatMouseDown() { mouseDownRef.current = true; }; var onFormatMouseUp = function onFormatMouseUp(event) { var _ref = event.target, start = _ref.selectionStart; var closeMaskIndex = maskFormat.getMaskCellIndex(start); setFocusCellIndex(closeMaskIndex); // Force update the selection forceSelectionSync({}); onMouseUp === null || onMouseUp === void 0 || onMouseUp(event); mouseDownRef.current = false; }; // ====================== Focus Blur ====================== var onFormatFocus = function onFormatFocus(event) { setFocused(true); setFocusCellIndex(0); setFocusCellText(''); onFocus(event); }; var onSharedBlur = function onSharedBlur(event) { onBlur(event); }; var onFormatBlur = function onFormatBlur(event) { setFocused(false); onSharedBlur(event); }; // ======================== Active ======================== // Check if blur need reset input value (0,_hooks_useLockEffect__WEBPACK_IMPORTED_MODULE_11__["default"])(active, function () { if (!active && !preserveInvalidOnBlur) { setInputValue(value); } }); // ======================= Keyboard ======================= var onSharedKeyDown = function onSharedKeyDown(event) { if (event.key === 'Enter' && validateFormat(inputValue)) { onSubmit(); } onKeyDown === null || onKeyDown === void 0 || onKeyDown(event); }; var onFormatKeyDown = function onFormatKeyDown(event) { onSharedKeyDown(event); var key = event.key; // Save the cache with cell text var nextCellText = null; // Fill in the input var nextFillText = null; var maskCellLen = selectionEnd - selectionStart; var cellFormat = format.slice(selectionStart, selectionEnd); // Cell Index var offsetCellIndex = function offsetCellIndex(offset) { setFocusCellIndex(function (idx) { var nextIndex = idx + offset; nextIndex = Math.max(nextIndex, 0); nextIndex = Math.min(nextIndex, maskFormat.size() - 1); return nextIndex; }); }; // Range var offsetCellValue = function offsetCellValue(offset) { var _getMaskRange = (0,_util__WEBPACK_IMPORTED_MODULE_14__.getMaskRange)(cellFormat), _getMaskRange2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_getMaskRange, 3), rangeStart = _getMaskRange2[0], rangeEnd = _getMaskRange2[1], rangeDefault = _getMaskRange2[2]; var currentText = inputValue.slice(selectionStart, selectionEnd); var currentTextNum = Number(currentText); if (isNaN(currentTextNum)) { return String(rangeDefault ? rangeDefault : offset > 0 ? rangeStart : rangeEnd); } var num = currentTextNum + offset; var range = rangeEnd - rangeStart + 1; return String(rangeStart + (range + num - rangeStart) % range); }; switch (key) { // =============== Remove =============== case 'Backspace': case 'Delete': nextCellText = ''; nextFillText = cellFormat; break; // =============== Arrows =============== // Left key case 'ArrowLeft': nextCellText = ''; offsetCellIndex(-1); break; // Right key case 'ArrowRight': nextCellText = ''; offsetCellIndex(1); break; // Up key case 'ArrowUp': nextCellText = ''; nextFillText = offsetCellValue(1); break; // Down key case 'ArrowDown': nextCellText = ''; nextFillText = offsetCellValue(-1); break; // =============== Number =============== default: if (!isNaN(Number(key))) { nextCellText = focusCellText + key; nextFillText = nextCellText; } break; } // Update cell text if (nextCellText !== null) { setFocusCellText(nextCellText); if (nextCellText.length >= maskCellLen) { // Go to next cell offsetCellIndex(1); setFocusCellText(''); } } // Update the input text if (nextFillText !== null) { // Replace selection range with `nextCellText` var nextFocusValue = // before inputValue.slice(0, selectionStart) + // replace (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_9__.leftPad)(nextFillText, maskCellLen) + // after inputValue.slice(selectionEnd); triggerInputChange(nextFocusValue.slice(0, format.length)); } // Always trigger selection sync after key down forceSelectionSync({}); }; // ======================== Format ======================== var rafRef = react__WEBPACK_IMPORTED_MODULE_8__.useRef(); (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_6__["default"])(function () { if (!focused || !format || mouseDownRef.current) { return; } // Reset with format if not match if (!maskFormat.match(inputValue)) { triggerInputChange(format); return; } // Match the selection range inputRef.current.setSelectionRange(selectionStart, selectionEnd); // Chrome has the bug anchor position looks not correct but actually correct rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_7__["default"])(function () { inputRef.current.setSelectionRange(selectionStart, selectionEnd); }); return function () { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_7__["default"].cancel(rafRef.current); }; }, [maskFormat, format, focused, inputValue, focusCellIndex, selectionStart, selectionEnd, forceSelectionSyncMark, triggerInputChange]); // ======================== Render ======================== // Input props for format var inputProps = format ? { onFocus: onFormatFocus, onBlur: onFormatBlur, onKeyDown: onFormatKeyDown, onMouseDown: onFormatMouseDown, onMouseUp: onFormatMouseUp, onPaste: onFormatPaste } : {}; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement("div", { ref: holderRef, className: classnames__WEBPACK_IMPORTED_MODULE_4___default()(inputPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(inputPrefixCls, "-active"), active && showActiveCls), "".concat(inputPrefixCls, "-placeholder"), helped)) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: inputRef, "aria-invalid": invalid, autoComplete: "off" }, restProps, { onKeyDown: onSharedKeyDown, onBlur: onSharedBlur // Replace with format }, inputProps, { // Value value: inputValue, onChange: onInternalChange })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_12__["default"], { type: "suffix", icon: suffixIcon }), clearIcon); }); if (true) { Input.displayName = 'Input'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Input); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/MaskFormat.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/MaskFormat.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ MaskFormat) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); var FORMAT_KEYS = ['YYYY', 'MM', 'DD', 'HH', 'mm', 'ss', 'SSS']; // Use Chinese character to avoid conflict with the mask format var REPLACE_KEY = '顧'; var MaskFormat = /*#__PURE__*/function () { function MaskFormat(format) { (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, MaskFormat); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "format", void 0); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "maskFormat", void 0); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "cells", void 0); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "maskCells", void 0); this.format = format; // Generate mask format var replaceKeys = FORMAT_KEYS.map(function (key) { return "(".concat(key, ")"); }).join('|'); var replaceReg = new RegExp(replaceKeys, 'g'); this.maskFormat = format.replace(replaceReg, // Use Chinese character to avoid user use it in format function (key) { return REPLACE_KEY.repeat(key.length); }); // Generate cells var cellReg = new RegExp("(".concat(FORMAT_KEYS.join('|'), ")")); var strCells = (format.split(cellReg) || []).filter(function (str) { return str; }); var offset = 0; this.cells = strCells.map(function (text) { var mask = FORMAT_KEYS.includes(text); var start = offset; var end = offset + text.length; offset = end; return { text: text, mask: mask, start: start, end: end }; }); // Mask cells this.maskCells = this.cells.filter(function (cell) { return cell.mask; }); } (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(MaskFormat, [{ key: "getSelection", value: function getSelection(maskCellIndex) { var _ref = this.maskCells[maskCellIndex] || {}, start = _ref.start, end = _ref.end; return [start || 0, end || 0]; } /** Check given text match format */ }, { key: "match", value: function match(text) { for (var i = 0; i < this.maskFormat.length; i += 1) { var maskChar = this.maskFormat[i]; var textChar = text[i]; if (!textChar || maskChar !== REPLACE_KEY && maskChar !== textChar) { return false; } } return true; } /** Get mask cell count */ }, { key: "size", value: function size() { return this.maskCells.length; } }, { key: "getMaskCellIndex", value: function getMaskCellIndex(anchorIndex) { var closetDist = Number.MAX_SAFE_INTEGER; var closetIndex = 0; for (var i = 0; i < this.maskCells.length; i += 1) { var _this$maskCells$i = this.maskCells[i], start = _this$maskCells$i.start, end = _this$maskCells$i.end; if (anchorIndex >= start && anchorIndex <= end) { return i; } var dist = Math.min(Math.abs(anchorIndex - start), Math.abs(anchorIndex - end)); if (dist < closetDist) { closetDist = dist; closetIndex = i; } } return closetIndex; } }]); return MaskFormat; }(); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/RangeSelector.js": /*!********************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/RangeSelector.js ***! \********************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var rc_resize_observer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-resize-observer */ "../../../node_modules/rc-resize-observer/es/index.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _hooks_useInputProps__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/useInputProps */ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useInputProps.js"); /* harmony import */ var _hooks_useRootProps__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useRootProps */ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useRootProps.js"); /* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Icon */ "../../../node_modules/rc-picker/es/PickerInput/Selector/Icon.js"); /* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./Input */ "../../../node_modules/rc-picker/es/PickerInput/Selector/Input.js"); var _excluded = ["id", "prefix", "clearIcon", "suffixIcon", "separator", "activeIndex", "activeHelp", "allHelp", "focused", "onFocus", "onBlur", "onKeyDown", "locale", "generateConfig", "placeholder", "className", "style", "onClick", "onClear", "value", "onChange", "onSubmit", "onInputChange", "format", "maskFormat", "preserveInvalidOnBlur", "onInvalid", "disabled", "invalid", "inputReadOnly", "direction", "onOpenChange", "onActiveInfo", "placement", "onMouseDown", "required", "aria-required", "autoFocus", "tabIndex"], _excluded2 = ["index"]; function RangeSelector(props, ref) { var id = props.id, prefix = props.prefix, clearIcon = props.clearIcon, suffixIcon = props.suffixIcon, _props$separator = props.separator, separator = _props$separator === void 0 ? '~' : _props$separator, activeIndex = props.activeIndex, activeHelp = props.activeHelp, allHelp = props.allHelp, focused = props.focused, onFocus = props.onFocus, onBlur = props.onBlur, onKeyDown = props.onKeyDown, locale = props.locale, generateConfig = props.generateConfig, placeholder = props.placeholder, className = props.className, style = props.style, onClick = props.onClick, onClear = props.onClear, value = props.value, onChange = props.onChange, onSubmit = props.onSubmit, onInputChange = props.onInputChange, format = props.format, maskFormat = props.maskFormat, preserveInvalidOnBlur = props.preserveInvalidOnBlur, onInvalid = props.onInvalid, disabled = props.disabled, invalid = props.invalid, inputReadOnly = props.inputReadOnly, direction = props.direction, onOpenChange = props.onOpenChange, onActiveInfo = props.onActiveInfo, placement = props.placement, _onMouseDown = props.onMouseDown, required = props.required, ariaRequired = props['aria-required'], autoFocus = props.autoFocus, tabIndex = props.tabIndex, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(props, _excluded); var rtl = direction === 'rtl'; // ======================== Prefix ======================== var _React$useContext = react__WEBPACK_IMPORTED_MODULE_9__.useContext(_context__WEBPACK_IMPORTED_MODULE_10__["default"]), prefixCls = _React$useContext.prefixCls; // ========================== Id ========================== var ids = react__WEBPACK_IMPORTED_MODULE_9__.useMemo(function () { if (typeof id === 'string') { return [id]; } var mergedId = id || {}; return [mergedId.start, mergedId.end]; }, [id]); // ========================= Refs ========================= var rootRef = react__WEBPACK_IMPORTED_MODULE_9__.useRef(); var inputStartRef = react__WEBPACK_IMPORTED_MODULE_9__.useRef(); var inputEndRef = react__WEBPACK_IMPORTED_MODULE_9__.useRef(); var getInput = function getInput(index) { var _index; return (_index = [inputStartRef, inputEndRef][index]) === null || _index === void 0 ? void 0 : _index.current; }; react__WEBPACK_IMPORTED_MODULE_9__.useImperativeHandle(ref, function () { return { nativeElement: rootRef.current, focus: function focus(options) { if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__["default"])(options) === 'object') { var _getInput; var _ref = options || {}, _ref$index = _ref.index, _index2 = _ref$index === void 0 ? 0 : _ref$index, rest = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_5__["default"])(_ref, _excluded2); (_getInput = getInput(_index2)) === null || _getInput === void 0 || _getInput.focus(rest); } else { var _getInput2; (_getInput2 = getInput(options !== null && options !== void 0 ? options : 0)) === null || _getInput2 === void 0 || _getInput2.focus(); } }, blur: function blur() { var _getInput3, _getInput4; (_getInput3 = getInput(0)) === null || _getInput3 === void 0 || _getInput3.blur(); (_getInput4 = getInput(1)) === null || _getInput4 === void 0 || _getInput4.blur(); } }; }); // ======================== Props ========================= var rootProps = (0,_hooks_useRootProps__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps); // ===================== Placeholder ====================== var mergedPlaceholder = react__WEBPACK_IMPORTED_MODULE_9__.useMemo(function () { return Array.isArray(placeholder) ? placeholder : [placeholder, placeholder]; }, [placeholder]); // ======================== Inputs ======================== var _useInputProps = (0,_hooks_useInputProps__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, { id: ids, placeholder: mergedPlaceholder })), _useInputProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useInputProps, 1), getInputProps = _useInputProps2[0]; // ====================== ActiveBar ======================= var _React$useState = react__WEBPACK_IMPORTED_MODULE_9__.useState({ position: 'absolute', width: 0 }), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), activeBarStyle = _React$useState2[0], setActiveBarStyle = _React$useState2[1]; var syncActiveOffset = (0,rc_util__WEBPACK_IMPORTED_MODULE_8__.useEvent)(function () { var input = getInput(activeIndex); if (input) { var inputRect = input.nativeElement.getBoundingClientRect(); var parentRect = rootRef.current.getBoundingClientRect(); var rectOffset = inputRect.left - parentRect.left; setActiveBarStyle(function (ori) { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, ori), {}, { width: inputRect.width, left: rectOffset }); }); onActiveInfo([inputRect.left, inputRect.right, parentRect.width]); } }); react__WEBPACK_IMPORTED_MODULE_9__.useEffect(function () { syncActiveOffset(); }, [activeIndex]); // ======================== Clear ========================= var showClear = clearIcon && (value[0] && !disabled[0] || value[1] && !disabled[1]); // ======================= Disabled ======================= var startAutoFocus = autoFocus && !disabled[0]; var endAutoFocus = autoFocus && !startAutoFocus && !disabled[1]; // ======================== Render ======================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(rc_resize_observer__WEBPACK_IMPORTED_MODULE_7__["default"], { onResize: syncActiveOffset }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, rootProps, { className: classnames__WEBPACK_IMPORTED_MODULE_6___default()(prefixCls, "".concat(prefixCls, "-range"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-focused"), focused), "".concat(prefixCls, "-disabled"), disabled.every(function (i) { return i; })), "".concat(prefixCls, "-invalid"), invalid.some(function (i) { return i; })), "".concat(prefixCls, "-rtl"), rtl), className), style: style, ref: rootRef, onClick: onClick // Not lose current input focus , onMouseDown: function onMouseDown(e) { var target = e.target; if (target !== inputStartRef.current.inputElement && target !== inputEndRef.current.inputElement) { e.preventDefault(); } _onMouseDown === null || _onMouseDown === void 0 || _onMouseDown(e); } }), prefix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", { className: "".concat(prefixCls, "-prefix") }, prefix), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Input__WEBPACK_IMPORTED_MODULE_14__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: inputStartRef }, getInputProps(0), { autoFocus: startAutoFocus, tabIndex: tabIndex, "date-range": "start" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", { className: "".concat(prefixCls, "-range-separator") }, separator), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Input__WEBPACK_IMPORTED_MODULE_14__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: inputEndRef }, getInputProps(1), { autoFocus: endAutoFocus, tabIndex: tabIndex, "date-range": "end" })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement("div", { className: "".concat(prefixCls, "-active-bar"), style: activeBarStyle }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_13__["default"], { type: "suffix", icon: suffixIcon }), showClear && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_13__.ClearIcon, { icon: clearIcon, onClear: onClear }))); } var RefRangeSelector = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_9__.forwardRef(RangeSelector); if (true) { RefRangeSelector.displayName = 'RangeSelector'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefRangeSelector); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/MultipleDates.js": /*!***********************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/MultipleDates.js ***! \***********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ MultipleDates) /* harmony export */ }); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var rc_overflow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-overflow */ "../../../node_modules/rc-overflow/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); function MultipleDates(props) { var prefixCls = props.prefixCls, value = props.value, onRemove = props.onRemove, _props$removeIcon = props.removeIcon, removeIcon = _props$removeIcon === void 0 ? '×' : _props$removeIcon, formatDate = props.formatDate, disabled = props.disabled, maxTagCount = props.maxTagCount, placeholder = props.placeholder; var selectorCls = "".concat(prefixCls, "-selector"); var selectionCls = "".concat(prefixCls, "-selection"); var overflowCls = "".concat(selectionCls, "-overflow"); // ========================= Item ========================= function renderSelector(content, onClose) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { className: classnames__WEBPACK_IMPORTED_MODULE_0___default()("".concat(selectionCls, "-item")), title: typeof content === 'string' ? content : null }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { className: "".concat(selectionCls, "-item-content") }, content), !disabled && onClose && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { onMouseDown: function onMouseDown(e) { e.preventDefault(); }, onClick: onClose, className: "".concat(selectionCls, "-item-remove") }, removeIcon)); } function renderItem(date) { var displayLabel = formatDate(date); var onClose = function onClose(event) { if (event) event.stopPropagation(); onRemove(date); }; return renderSelector(displayLabel, onClose); } // ========================= Rest ========================= function renderRest(omittedValues) { var content = "+ ".concat(omittedValues.length, " ..."); return renderSelector(content); } // ======================== Render ======================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: selectorCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(rc_overflow__WEBPACK_IMPORTED_MODULE_1__["default"], { prefixCls: overflowCls, data: value, renderItem: renderItem, renderRest: renderRest // suffix={inputNode} , itemKey: function itemKey(date) { return formatDate(date); }, maxCount: maxTagCount }), !value.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { className: "".concat(prefixCls, "-selection-placeholder") }, placeholder)); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/index.js": /*!***************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/index.js ***! \***************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _Icon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Icon */ "../../../node_modules/rc-picker/es/PickerInput/Selector/Icon.js"); /* harmony import */ var _Input__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Input */ "../../../node_modules/rc-picker/es/PickerInput/Selector/Input.js"); /* harmony import */ var _hooks_useInputProps__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../hooks/useInputProps */ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useInputProps.js"); /* harmony import */ var _hooks_useRootProps__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../hooks/useRootProps */ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useRootProps.js"); /* harmony import */ var _MultipleDates__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./MultipleDates */ "../../../node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/MultipleDates.js"); var _excluded = ["id", "open", "prefix", "clearIcon", "suffixIcon", "activeHelp", "allHelp", "focused", "onFocus", "onBlur", "onKeyDown", "locale", "generateConfig", "placeholder", "className", "style", "onClick", "onClear", "internalPicker", "value", "onChange", "onSubmit", "onInputChange", "multiple", "maxTagCount", "format", "maskFormat", "preserveInvalidOnBlur", "onInvalid", "disabled", "invalid", "inputReadOnly", "direction", "onOpenChange", "onMouseDown", "required", "aria-required", "autoFocus", "tabIndex", "removeIcon"]; function SingleSelector(props, ref) { var id = props.id, open = props.open, prefix = props.prefix, clearIcon = props.clearIcon, suffixIcon = props.suffixIcon, activeHelp = props.activeHelp, allHelp = props.allHelp, focused = props.focused, onFocus = props.onFocus, onBlur = props.onBlur, onKeyDown = props.onKeyDown, locale = props.locale, generateConfig = props.generateConfig, placeholder = props.placeholder, className = props.className, style = props.style, onClick = props.onClick, onClear = props.onClear, internalPicker = props.internalPicker, value = props.value, onChange = props.onChange, onSubmit = props.onSubmit, onInputChange = props.onInputChange, multiple = props.multiple, maxTagCount = props.maxTagCount, format = props.format, maskFormat = props.maskFormat, preserveInvalidOnBlur = props.preserveInvalidOnBlur, onInvalid = props.onInvalid, disabled = props.disabled, invalid = props.invalid, inputReadOnly = props.inputReadOnly, direction = props.direction, onOpenChange = props.onOpenChange, _onMouseDown = props.onMouseDown, required = props.required, ariaRequired = props['aria-required'], autoFocus = props.autoFocus, tabIndex = props.tabIndex, removeIcon = props.removeIcon, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_4__["default"])(props, _excluded); var rtl = direction === 'rtl'; // ======================== Prefix ======================== var _React$useContext = react__WEBPACK_IMPORTED_MODULE_6__.useContext(_context__WEBPACK_IMPORTED_MODULE_8__["default"]), prefixCls = _React$useContext.prefixCls; // ========================= Refs ========================= var rootRef = react__WEBPACK_IMPORTED_MODULE_6__.useRef(); var inputRef = react__WEBPACK_IMPORTED_MODULE_6__.useRef(); react__WEBPACK_IMPORTED_MODULE_6__.useImperativeHandle(ref, function () { return { nativeElement: rootRef.current, focus: function focus(options) { var _inputRef$current; (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus(options); }, blur: function blur() { var _inputRef$current2; (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.blur(); } }; }); // ======================== Props ========================= var rootProps = (0,_hooks_useRootProps__WEBPACK_IMPORTED_MODULE_12__["default"])(restProps); // ======================== Change ======================== var onSingleChange = function onSingleChange(date) { onChange([date]); }; var onMultipleRemove = function onMultipleRemove(date) { var nextValues = value.filter(function (oriDate) { return oriDate && !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_7__.isSame)(generateConfig, locale, oriDate, date, internalPicker); }); onChange(nextValues); // When `open`, it means user is operating the if (!open) { onSubmit(); } }; // ======================== Inputs ======================== var _useInputProps = (0,_hooks_useInputProps__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, props), {}, { onChange: onSingleChange }), function (_ref) { var valueTexts = _ref.valueTexts; return { value: valueTexts[0] || '', active: focused }; }), _useInputProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useInputProps, 2), getInputProps = _useInputProps2[0], getText = _useInputProps2[1]; // ======================== Clear ========================= var showClear = !!(clearIcon && value.length && !disabled); // ======================= Multiple ======================= var selectorNode = multiple ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(react__WEBPACK_IMPORTED_MODULE_6__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_MultipleDates__WEBPACK_IMPORTED_MODULE_13__["default"], { prefixCls: prefixCls, value: value, onRemove: onMultipleRemove, formatDate: getText, maxTagCount: maxTagCount, disabled: disabled, removeIcon: removeIcon, placeholder: placeholder }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("input", { className: "".concat(prefixCls, "-multiple-input"), value: value.map(getText).join(','), ref: inputRef, readOnly: true, autoFocus: autoFocus, tabIndex: tabIndex }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_9__["default"], { type: "suffix", icon: suffixIcon }), showClear && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_9__.ClearIcon, { icon: clearIcon, onClear: onClear })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_Input__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ ref: inputRef }, getInputProps(), { autoFocus: autoFocus, tabIndex: tabIndex, suffixIcon: suffixIcon, clearIcon: showClear && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement(_Icon__WEBPACK_IMPORTED_MODULE_9__.ClearIcon, { icon: clearIcon, onClear: onClear }), showActiveCls: false })); // ======================== Render ======================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, rootProps, { className: classnames__WEBPACK_IMPORTED_MODULE_5___default()(prefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(prefixCls, "-multiple"), multiple), "".concat(prefixCls, "-focused"), focused), "".concat(prefixCls, "-disabled"), disabled), "".concat(prefixCls, "-invalid"), invalid), "".concat(prefixCls, "-rtl"), rtl), className), style: style, ref: rootRef, onClick: onClick // Not lose current input focus , onMouseDown: function onMouseDown(e) { var _inputRef$current3; var target = e.target; if (target !== ((_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.inputElement)) { e.preventDefault(); } _onMouseDown === null || _onMouseDown === void 0 || _onMouseDown(e); } }), prefix && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", { className: "".concat(prefixCls, "-prefix") }, prefix), selectorNode); } var RefSingleSelector = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.forwardRef(SingleSelector); if (true) { RefSingleSelector.displayName = 'SingleSelector'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefSingleSelector); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useClearIcon.js": /*!*************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useClearIcon.js ***! \*************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ fillClearIcon: () => (/* binding */ fillClearIcon) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /** * Used for `useFilledProps` since it already in the React.useMemo */ function fillClearIcon(prefixCls, allowClear, clearIcon) { if ( true && clearIcon) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(false, '`clearIcon` will be removed in future. Please use `allowClear` instead.'); } if (allowClear === false) { return null; } var config = allowClear && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(allowClear) === 'object' ? allowClear : {}; return config.clearIcon || clearIcon || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("span", { className: "".concat(prefixCls, "-clear-btn") }); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useInputProps.js": /*!**************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useInputProps.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useInputProps) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/pickAttrs */ "../../../node_modules/rc-util/es/pickAttrs.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); function useInputProps(props, /** Used for SinglePicker */ postProps) { var format = props.format, maskFormat = props.maskFormat, generateConfig = props.generateConfig, locale = props.locale, preserveInvalidOnBlur = props.preserveInvalidOnBlur, inputReadOnly = props.inputReadOnly, required = props.required, ariaRequired = props['aria-required'], onSubmit = props.onSubmit, _onFocus = props.onFocus, _onBlur = props.onBlur, onInputChange = props.onInputChange, onInvalid = props.onInvalid, open = props.open, onOpenChange = props.onOpenChange, _onKeyDown = props.onKeyDown, _onChange = props.onChange, activeHelp = props.activeHelp, name = props.name, autoComplete = props.autoComplete, id = props.id, value = props.value, invalid = props.invalid, placeholder = props.placeholder, disabled = props.disabled, activeIndex = props.activeIndex, allHelp = props.allHelp, picker = props.picker; // ======================== Parser ======================== var parseDate = function parseDate(str, formatStr) { var parsed = generateConfig.locale.parse(locale.locale, str, [formatStr]); return parsed && generateConfig.isValidate(parsed) ? parsed : null; }; // ========================= Text ========================= var firstFormat = format[0]; var getText = react__WEBPACK_IMPORTED_MODULE_3__.useCallback(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: firstFormat, generateConfig: generateConfig }); }, [locale, generateConfig, firstFormat]); var valueTexts = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return value.map(getText); }, [value, getText]); // ========================= Size ========================= var size = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { var defaultSize = picker === 'time' ? 8 : 10; var length = typeof firstFormat === 'function' ? firstFormat(generateConfig.getNow()).length : firstFormat.length; return Math.max(defaultSize, length) + 2; }, [firstFormat, picker, generateConfig]); // ======================= Validate ======================= var _validateFormat = function validateFormat(text) { for (var i = 0; i < format.length; i += 1) { var singleFormat = format[i]; // Only support string type if (typeof singleFormat === 'string') { var parsed = parseDate(text, singleFormat); if (parsed) { return parsed; } } } return false; }; // ======================== Input ========================= var getInputProps = function getInputProps(index) { function getProp(propValue) { return index !== undefined ? propValue[index] : propValue; } var pickedAttrs = (0,rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_2__["default"])(props, { aria: true, data: true }); var inputProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, pickedAttrs), {}, { // ============== Shared ============== format: maskFormat, validateFormat: function validateFormat(text) { return !!_validateFormat(text); }, preserveInvalidOnBlur: preserveInvalidOnBlur, readOnly: inputReadOnly, required: required, 'aria-required': ariaRequired, name: name, autoComplete: autoComplete, size: size, // ============= By Index ============= id: getProp(id), value: getProp(valueTexts) || '', invalid: getProp(invalid), placeholder: getProp(placeholder), active: activeIndex === index, helped: allHelp || activeHelp && activeIndex === index, disabled: getProp(disabled), onFocus: function onFocus(event) { _onFocus(event, index); }, onBlur: function onBlur(event) { // Blur do not trigger close // Since it may focus to the popup panel _onBlur(event, index); }, onSubmit: onSubmit, // Get validate text value onChange: function onChange(text) { onInputChange(); var parsed = _validateFormat(text); if (parsed) { onInvalid(false, index); _onChange(parsed, index); return; } // Tell outer that the value typed is invalid. // If text is empty, it means valid. onInvalid(!!text, index); }, onHelp: function onHelp() { onOpenChange(true, { index: index }); }, onKeyDown: function onKeyDown(event) { var prevented = false; _onKeyDown === null || _onKeyDown === void 0 || _onKeyDown(event, function () { if (true) { (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.warning)(false, '`preventDefault` callback is deprecated. Please call `event.preventDefault` directly.'); } prevented = true; }); if (!event.defaultPrevented && !prevented) { switch (event.key) { case 'Escape': onOpenChange(false, { index: index }); break; case 'Enter': if (!open) { onOpenChange(true); } break; } } } }, postProps === null || postProps === void 0 ? void 0 : postProps({ valueTexts: valueTexts })); // ============== Clean Up ============== Object.keys(inputProps).forEach(function (key) { if (inputProps[key] === undefined) { delete inputProps[key]; } }); return inputProps; }; return [getInputProps, getText]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useRootProps.js": /*!*************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useRootProps.js ***! \*************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useRootProps) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); var propNames = ['onMouseEnter', 'onMouseLeave']; function useRootProps(props) { return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function () { return (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_1__.pickProps)(props, propNames); }, [props]); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/Selector/util.js": /*!***********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/Selector/util.js ***! \***********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getMaskRange: () => (/* binding */ getMaskRange) /* harmony export */ }); function getMaskRange(key) { var PresetRange = { YYYY: [0, 9999, new Date().getFullYear()], MM: [1, 12], DD: [1, 31], HH: [0, 23], mm: [0, 59], ss: [0, 59], SSS: [0, 999] }; return PresetRange[key]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/SinglePicker.js": /*!**********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/SinglePicker.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var rc_util_es_omit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/omit */ "../../../node_modules/rc-util/es/omit.js"); /* harmony import */ var rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/pickAttrs */ "../../../node_modules/rc-util/es/pickAttrs.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _hooks_useToggleDates__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../hooks/useToggleDates */ "../../../node_modules/rc-picker/es/hooks/useToggleDates.js"); /* harmony import */ var _PickerTrigger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../PickerTrigger */ "../../../node_modules/rc-picker/es/PickerTrigger/index.js"); /* harmony import */ var _PickerTrigger_util__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../PickerTrigger/util */ "../../../node_modules/rc-picker/es/PickerTrigger/util.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _hooks_useCellRender__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hooks/useCellRender */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js"); /* harmony import */ var _hooks_useFieldsInvalidate__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hooks/useFieldsInvalidate */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldsInvalidate.js"); /* harmony import */ var _hooks_useFilledProps__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./hooks/useFilledProps */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFilledProps.js"); /* harmony import */ var _hooks_useOpen__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hooks/useOpen */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useOpen.js"); /* harmony import */ var _hooks_usePickerRef__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./hooks/usePickerRef */ "../../../node_modules/rc-picker/es/PickerInput/hooks/usePickerRef.js"); /* harmony import */ var _hooks_usePresets__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./hooks/usePresets */ "../../../node_modules/rc-picker/es/PickerInput/hooks/usePresets.js"); /* harmony import */ var _hooks_useRangeActive__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./hooks/useRangeActive */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeActive.js"); /* harmony import */ var _hooks_useRangePickerValue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./hooks/useRangePickerValue */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js"); /* harmony import */ var _hooks_useRangeValue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./hooks/useRangeValue */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeValue.js"); /* harmony import */ var _hooks_useShowNow__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./hooks/useShowNow */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useShowNow.js"); /* harmony import */ var _Popup__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./Popup */ "../../../node_modules/rc-picker/es/PickerInput/Popup/index.js"); /* harmony import */ var _Selector_SingleSelector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./Selector/SingleSelector */ "../../../node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/index.js"); // TODO: isInvalidateDate with showTime.disabledTime should not provide `range` prop /** Internal usage. For cross function get same aligned props */ function Picker(props, ref) { // ========================= Prop ========================= var _useFilledProps = (0,_hooks_useFilledProps__WEBPACK_IMPORTED_MODULE_16__["default"])(props), _useFilledProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useFilledProps, 6), filledProps = _useFilledProps2[0], internalPicker = _useFilledProps2[1], complexPicker = _useFilledProps2[2], formatList = _useFilledProps2[3], maskFormat = _useFilledProps2[4], isInvalidateDate = _useFilledProps2[5]; var _ref = filledProps, prefixCls = _ref.prefixCls, styles = _ref.styles, classNames = _ref.classNames, order = _ref.order, defaultValue = _ref.defaultValue, value = _ref.value, needConfirm = _ref.needConfirm, onChange = _ref.onChange, onKeyDown = _ref.onKeyDown, disabled = _ref.disabled, disabledDate = _ref.disabledDate, minDate = _ref.minDate, maxDate = _ref.maxDate, defaultOpen = _ref.defaultOpen, open = _ref.open, onOpenChange = _ref.onOpenChange, locale = _ref.locale, generateConfig = _ref.generateConfig, picker = _ref.picker, showNow = _ref.showNow, showToday = _ref.showToday, showTime = _ref.showTime, mode = _ref.mode, onPanelChange = _ref.onPanelChange, onCalendarChange = _ref.onCalendarChange, onOk = _ref.onOk, multiple = _ref.multiple, defaultPickerValue = _ref.defaultPickerValue, pickerValue = _ref.pickerValue, onPickerValueChange = _ref.onPickerValueChange, inputReadOnly = _ref.inputReadOnly, suffixIcon = _ref.suffixIcon, removeIcon = _ref.removeIcon, onFocus = _ref.onFocus, onBlur = _ref.onBlur, presets = _ref.presets, components = _ref.components, cellRender = _ref.cellRender, dateRender = _ref.dateRender, monthCellRender = _ref.monthCellRender, onClick = _ref.onClick; // ========================= Refs ========================= var selectorRef = (0,_hooks_usePickerRef__WEBPACK_IMPORTED_MODULE_18__["default"])(ref); // ========================= Util ========================= function pickerParam(values) { if (values === null) { return null; } return multiple ? values : values[0]; } var toggleDates = (0,_hooks_useToggleDates__WEBPACK_IMPORTED_MODULE_9__["default"])(generateConfig, locale, internalPicker); // ========================= Open ========================= var _useOpen = (0,_hooks_useOpen__WEBPACK_IMPORTED_MODULE_17__["default"])(open, defaultOpen, [disabled], onOpenChange), _useOpen2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useOpen, 2), mergedOpen = _useOpen2[0], triggerOpen = _useOpen2[1]; // ======================= Calendar ======================= var onInternalCalendarChange = function onInternalCalendarChange(dates, dateStrings, info) { if (onCalendarChange) { var filteredInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, info); delete filteredInfo.range; onCalendarChange(pickerParam(dates), pickerParam(dateStrings), filteredInfo); } }; var onInternalOk = function onInternalOk(dates) { onOk === null || onOk === void 0 || onOk(pickerParam(dates)); }; // ======================== Values ======================== var _useInnerValue = (0,_hooks_useRangeValue__WEBPACK_IMPORTED_MODULE_22__.useInnerValue)(generateConfig, locale, formatList, false, order, defaultValue, value, onInternalCalendarChange, onInternalOk), _useInnerValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useInnerValue, 5), mergedValue = _useInnerValue2[0], setInnerValue = _useInnerValue2[1], getCalendarValue = _useInnerValue2[2], triggerCalendarChange = _useInnerValue2[3], triggerOk = _useInnerValue2[4]; var calendarValue = getCalendarValue(); // ======================== Active ======================== // In SinglePicker, we will always get `activeIndex` is 0. var _useRangeActive = (0,_hooks_useRangeActive__WEBPACK_IMPORTED_MODULE_20__["default"])([disabled]), _useRangeActive2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useRangeActive, 4), focused = _useRangeActive2[0], triggerFocus = _useRangeActive2[1], lastOperation = _useRangeActive2[2], activeIndex = _useRangeActive2[3]; var onSharedFocus = function onSharedFocus(event) { triggerFocus(true); onFocus === null || onFocus === void 0 || onFocus(event, {}); }; var onSharedBlur = function onSharedBlur(event) { triggerFocus(false); onBlur === null || onBlur === void 0 || onBlur(event, {}); }; // ========================= Mode ========================= var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_4__.useMergedState)(picker, { value: mode }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useMergedState, 2), mergedMode = _useMergedState2[0], setMode = _useMergedState2[1]; /** Extends from `mergedMode` to patch `datetime` mode */ var internalMode = mergedMode === 'date' && showTime ? 'datetime' : mergedMode; // ======================= Show Now ======================= var mergedShowNow = (0,_hooks_useShowNow__WEBPACK_IMPORTED_MODULE_23__["default"])(picker, mergedMode, showNow, showToday); // ======================== Value ========================= var onInternalChange = onChange && function (dates, dateStrings) { onChange(pickerParam(dates), pickerParam(dateStrings)); }; var _useRangeValue = (0,_hooks_useRangeValue__WEBPACK_IMPORTED_MODULE_22__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, filledProps), {}, { onChange: onInternalChange }), mergedValue, setInnerValue, getCalendarValue, triggerCalendarChange, [], //disabled, formatList, focused, mergedOpen, isInvalidateDate), _useRangeValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useRangeValue, 2), /** Trigger `onChange` directly without check `disabledDate` */ triggerSubmitChange = _useRangeValue2[1]; // ======================= Validate ======================= var _useFieldsInvalidate = (0,_hooks_useFieldsInvalidate__WEBPACK_IMPORTED_MODULE_15__["default"])(calendarValue, isInvalidateDate), _useFieldsInvalidate2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useFieldsInvalidate, 2), submitInvalidates = _useFieldsInvalidate2[0], onSelectorInvalid = _useFieldsInvalidate2[1]; var submitInvalidate = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { return submitInvalidates.some(function (invalidated) { return invalidated; }); }, [submitInvalidates]); // ===================== Picker Value ===================== // Proxy to single pickerValue var onInternalPickerValueChange = function onInternalPickerValueChange(dates, info) { if (onPickerValueChange) { var cleanInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, info), {}, { mode: info.mode[0] }); delete cleanInfo.range; onPickerValueChange(dates[0], cleanInfo); } }; var _useRangePickerValue = (0,_hooks_useRangePickerValue__WEBPACK_IMPORTED_MODULE_21__["default"])(generateConfig, locale, calendarValue, [mergedMode], mergedOpen, activeIndex, internalPicker, false, // multiplePanel, defaultPickerValue, pickerValue, (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_12__.toArray)(showTime === null || showTime === void 0 ? void 0 : showTime.defaultOpenValue), onInternalPickerValueChange, minDate, maxDate), _useRangePickerValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_useRangePickerValue, 2), currentPickerValue = _useRangePickerValue2[0], setCurrentPickerValue = _useRangePickerValue2[1]; // >>> Mode need wait for `pickerValue` var triggerModeChange = (0,rc_util__WEBPACK_IMPORTED_MODULE_4__.useEvent)(function (nextPickerValue, nextMode, triggerEvent) { setMode(nextMode); // Compatible with `onPanelChange` if (onPanelChange && triggerEvent !== false) { var lastPickerValue = nextPickerValue || calendarValue[calendarValue.length - 1]; onPanelChange(lastPickerValue, nextMode); } }); // ======================== Submit ======================== /** * Different with RangePicker, confirm should check `multiple` logic. * This will never provide `date` instead. */ var triggerConfirm = function triggerConfirm() { triggerSubmitChange(getCalendarValue()); triggerOpen(false, { force: true }); }; // ======================== Click ========================= var onSelectorClick = function onSelectorClick(event) { if (!disabled && !selectorRef.current.nativeElement.contains(document.activeElement)) { // Click to focus the enabled input selectorRef.current.focus(); } triggerOpen(true); onClick === null || onClick === void 0 || onClick(event); }; var onSelectorClear = function onSelectorClear() { triggerSubmitChange(null); triggerOpen(false, { force: true }); }; // ======================== Hover ========================= var _React$useState = react__WEBPACK_IMPORTED_MODULE_8__.useState(null), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState, 2), hoverSource = _React$useState2[0], setHoverSource = _React$useState2[1]; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_8__.useState(null), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_React$useState3, 2), internalHoverValue = _React$useState4[0], setInternalHoverValue = _React$useState4[1]; var hoverValues = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { var values = [internalHoverValue].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(calendarValue)).filter(function (date) { return date; }); return multiple ? values : values.slice(0, 1); }, [calendarValue, internalHoverValue, multiple]); // Selector values is different with RangePicker // which can not use `hoverValue` directly var selectorValues = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { if (!multiple && internalHoverValue) { return [internalHoverValue]; } return calendarValue.filter(function (date) { return date; }); }, [calendarValue, internalHoverValue, multiple]); // Clean up `internalHoverValues` when closed react__WEBPACK_IMPORTED_MODULE_8__.useEffect(function () { if (!mergedOpen) { setInternalHoverValue(null); } }, [mergedOpen]); // ======================================================== // == Panels == // ======================================================== // ======================= Presets ======================== var presetList = (0,_hooks_usePresets__WEBPACK_IMPORTED_MODULE_19__["default"])(presets); var onPresetHover = function onPresetHover(nextValue) { setInternalHoverValue(nextValue); setHoverSource('preset'); }; // TODO: handle this var onPresetSubmit = function onPresetSubmit(nextValue) { var nextCalendarValues = multiple ? toggleDates(getCalendarValue(), nextValue) : [nextValue]; var passed = triggerSubmitChange(nextCalendarValues); if (passed && !multiple) { triggerOpen(false, { force: true }); } }; var onNow = function onNow(now) { onPresetSubmit(now); }; // ======================== Panel ========================= var onPanelHover = function onPanelHover(date) { setInternalHoverValue(date); setHoverSource('cell'); }; // >>> Focus var onPanelFocus = function onPanelFocus(event) { triggerOpen(true); onSharedFocus(event); }; // >>> Calendar var onPanelSelect = function onPanelSelect(date) { lastOperation('panel'); // Not change values if multiple and current panel is to match with picker if (multiple && internalMode !== picker) { return; } var nextValues = multiple ? toggleDates(getCalendarValue(), date) : [date]; // Only trigger calendar event but not update internal `calendarValue` state triggerCalendarChange(nextValues); // >>> Trigger next active if !needConfirm // Fully logic check `useRangeValue` hook if (!needConfirm && !complexPicker && internalPicker === internalMode) { triggerConfirm(); } }; // >>> Close var onPopupClose = function onPopupClose() { // Close popup triggerOpen(false); }; // >>> cellRender var onInternalCellRender = (0,_hooks_useCellRender__WEBPACK_IMPORTED_MODULE_14__["default"])(cellRender, dateRender, monthCellRender); // >>> invalid var panelProps = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { var domProps = (0,rc_util_es_pickAttrs__WEBPACK_IMPORTED_MODULE_7__["default"])(filledProps, false); var restProps = (0,rc_util_es_omit__WEBPACK_IMPORTED_MODULE_6__["default"])(filledProps, [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(Object.keys(domProps)), ['onChange', 'onCalendarChange', 'style', 'className', 'onPanelChange'])); return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, restProps), {}, { multiple: filledProps.multiple }); }, [filledProps]); // >>> Render var panel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement(_Popup__WEBPACK_IMPORTED_MODULE_24__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, panelProps, { showNow: mergedShowNow, showTime: showTime // Disabled , disabledDate: disabledDate // Focus , onFocus: onPanelFocus, onBlur: onSharedBlur // Mode , picker: picker, mode: mergedMode, internalMode: internalMode, onPanelChange: triggerModeChange // Value , format: maskFormat, value: calendarValue, isInvalid: isInvalidateDate, onChange: null, onSelect: onPanelSelect // PickerValue , pickerValue: currentPickerValue, defaultOpenValue: showTime === null || showTime === void 0 ? void 0 : showTime.defaultOpenValue, onPickerValueChange: setCurrentPickerValue // Hover , hoverValue: hoverValues, onHover: onPanelHover // Submit , needConfirm: needConfirm, onSubmit: triggerConfirm, onOk: triggerOk // Preset , presets: presetList, onPresetHover: onPresetHover, onPresetSubmit: onPresetSubmit, onNow: onNow // Render , cellRender: onInternalCellRender })); // ======================================================== // == Selector == // ======================================================== // ======================== Change ======================== var onSelectorChange = function onSelectorChange(date) { triggerCalendarChange(date); }; var onSelectorInputChange = function onSelectorInputChange() { lastOperation('input'); }; // ======================= Selector ======================= var onSelectorFocus = function onSelectorFocus(event) { lastOperation('input'); triggerOpen(true, { inherit: true }); // setActiveIndex(index); onSharedFocus(event); }; var onSelectorBlur = function onSelectorBlur(event) { triggerOpen(false); onSharedBlur(event); }; var onSelectorKeyDown = function onSelectorKeyDown(event, preventDefault) { if (event.key === 'Tab') { triggerConfirm(); } onKeyDown === null || onKeyDown === void 0 || onKeyDown(event, preventDefault); }; // ======================= Context ======================== var context = react__WEBPACK_IMPORTED_MODULE_8__.useMemo(function () { return { prefixCls: prefixCls, locale: locale, generateConfig: generateConfig, button: components.button, input: components.input }; }, [prefixCls, locale, generateConfig, components.button, components.input]); // ======================== Effect ======================== // >>> Mode // Reset for every active (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_5__["default"])(function () { if (mergedOpen && activeIndex !== undefined) { // Legacy compatible. This effect update should not trigger `onPanelChange` triggerModeChange(null, picker, false); } }, [mergedOpen, activeIndex, picker]); // >>> For complex picker, we need check if need to focus next one (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_5__["default"])(function () { var lastOp = lastOperation(); // Trade as confirm on field leave if (!mergedOpen && lastOp === 'input') { triggerOpen(false); triggerConfirm(); } // Submit with complex picker if (!mergedOpen && complexPicker && !needConfirm && lastOp === 'panel') { triggerConfirm(); } }, [mergedOpen]); // ======================== Render ======================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement(_context__WEBPACK_IMPORTED_MODULE_13__["default"].Provider, { value: context }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement(_PickerTrigger__WEBPACK_IMPORTED_MODULE_10__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, (0,_PickerTrigger_util__WEBPACK_IMPORTED_MODULE_11__.pickTriggerProps)(filledProps), { popupElement: panel, popupStyle: styles.popup, popupClassName: classNames.popup // Visible , visible: mergedOpen, onClose: onPopupClose }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.createElement(_Selector_SingleSelector__WEBPACK_IMPORTED_MODULE_25__["default"] // Shared , (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, filledProps, { // Ref ref: selectorRef // Icon , suffixIcon: suffixIcon, removeIcon: removeIcon // Active , activeHelp: !!internalHoverValue, allHelp: !!internalHoverValue && hoverSource === 'preset', focused: focused, onFocus: onSelectorFocus, onBlur: onSelectorBlur, onKeyDown: onSelectorKeyDown, onSubmit: triggerConfirm // Change , value: selectorValues, maskFormat: maskFormat, onChange: onSelectorChange, onInputChange: onSelectorInputChange, internalPicker: internalPicker // Format , format: formatList, inputReadOnly: inputReadOnly // Disabled , disabled: disabled // Open , open: mergedOpen, onOpenChange: triggerOpen // Click , onClick: onSelectorClick, onClear: onSelectorClear // Invalid , invalid: submitInvalidate, onInvalid: function onInvalid(invalid) { // Only `single` mode support type date. // `multiple` mode can not typing. onSelectorInvalid(invalid, 0); } })))); } var RefPicker = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_8__.forwardRef(Picker); if (true) { RefPicker.displayName = 'RefPicker'; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefPicker); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/context.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/context.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var PickerContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PickerContext); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useCellRender) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); function useCellRender(cellRender, dateRender, monthCellRender, range) { // ========================= Warn ========================= if (true) { (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.warning)(!dateRender, "'dateRender' is deprecated. Please use 'cellRender' instead."); (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.warning)(!monthCellRender, "'monthCellRender' is deprecated. Please use 'cellRender' instead."); } // ======================== Render ======================== // Merged render var mergedCellRender = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { if (cellRender) { return cellRender; } return function (current, info) { var date = current; if (dateRender && info.type === 'date') { return dateRender(date, info.today); } if (monthCellRender && info.type === 'month') { return monthCellRender(date, info.locale); } return info.originNode; }; }, [cellRender, monthCellRender, dateRender]); // Cell render var onInternalCellRender = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(function (date, info) { return mergedCellRender(date, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, info), {}, { range: range })); }, [mergedCellRender, range]); return onInternalCellRender; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useDelayState.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useDelayState.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useDelayState) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /** * Will be `true` immediately for next effect. * But will be `false` for a delay of effect. */ function useDelayState(value, defaultValue, onChange) { var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.useMergedState)(defaultValue, { value: value }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState, 2), state = _useMergedState2[0], setState = _useMergedState2[1]; var nextValueRef = react__WEBPACK_IMPORTED_MODULE_3___default().useRef(value); // ============================= Update ============================= var rafRef = react__WEBPACK_IMPORTED_MODULE_3___default().useRef(); var cancelRaf = function cancelRaf() { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_2__["default"].cancel(rafRef.current); }; var doUpdate = (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.useEvent)(function () { setState(nextValueRef.current); if (onChange && state !== nextValueRef.current) { onChange(nextValueRef.current); } }); var updateValue = (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.useEvent)(function (next, immediately) { cancelRaf(); nextValueRef.current = next; if (next || immediately) { doUpdate(); } else { rafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_2__["default"])(doUpdate); } }); react__WEBPACK_IMPORTED_MODULE_3___default().useEffect(function () { return cancelRaf; }, []); return [state, updateValue]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useDisabledBoundary.js": /*!***********************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useDisabledBoundary.js ***! \***********************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useDisabledBoundary) /* harmony export */ }); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /** * Merge `disabledDate` with `minDate` & `maxDate`. */ function useDisabledBoundary(generateConfig, locale, disabledDate, minDate, maxDate) { var mergedDisabledDate = (0,rc_util__WEBPACK_IMPORTED_MODULE_0__.useEvent)(function (date, info) { if (disabledDate && disabledDate(date, info)) { return true; } if (minDate && generateConfig.isAfter(minDate, date) && !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__.isSame)(generateConfig, locale, minDate, date, info.type)) { return true; } if (maxDate && generateConfig.isAfter(date, maxDate) && !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__.isSame)(generateConfig, locale, maxDate, date, info.type)) { return true; } return false; }); return mergedDisabledDate; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldFormat.js": /*!******************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldFormat.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useFieldFormat: () => (/* binding */ useFieldFormat) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); function useFieldFormat(picker, locale, format) { return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { var rawFormat = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_2__.getRowFormat)(picker, locale, format); var formatList = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_2__.toArray)(rawFormat); var firstFormat = formatList[0]; var maskFormat = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(firstFormat) === 'object' && firstFormat.type === 'mask' ? firstFormat.format : null; return [ // Format list formatList.map(function (config) { return typeof config === 'string' || typeof config === 'function' ? config : config.format; }), // Mask Format maskFormat]; }, [picker, locale, format]); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldsInvalidate.js": /*!***********************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldsInvalidate.js ***! \***********************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useFieldsInvalidate) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /** * Used to control each fields invalidate status */ function useFieldsInvalidate(calendarValue, isInvalidateDate) { var allowEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; var _React$useState = react__WEBPACK_IMPORTED_MODULE_2__.useState([false, false]), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2), fieldsInvalidates = _React$useState2[0], setFieldsInvalidates = _React$useState2[1]; var onSelectorInvalid = function onSelectorInvalid(invalid, index) { setFieldsInvalidates(function (ori) { return (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_1__.fillIndex)(ori, index, invalid); }); }; /** * For the Selector Input to mark as `aria-disabled` */ var submitInvalidates = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return fieldsInvalidates.map(function (invalid, index) { // If typing invalidate if (invalid) { return true; } var current = calendarValue[index]; // Not check if all empty if (!current) { return false; } // Not allow empty if (!allowEmpty[index] && !current) { return true; } // Invalidate if (current && isInvalidateDate(current, { activeIndex: index })) { return true; } return false; }); }, [calendarValue, fieldsInvalidates, isInvalidateDate, allowEmpty]); return [submitInvalidates, onSelectorInvalid]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFilledProps.js": /*!******************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useFilledProps.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useFilledProps) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _hooks_useLocale__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/useLocale */ "../../../node_modules/rc-picker/es/hooks/useLocale.js"); /* harmony import */ var _hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/useTimeConfig */ "../../../node_modules/rc-picker/es/hooks/useTimeConfig.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _Selector_hooks_useClearIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Selector/hooks/useClearIcon */ "../../../node_modules/rc-picker/es/PickerInput/Selector/hooks/useClearIcon.js"); /* harmony import */ var _useDisabledBoundary__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useDisabledBoundary */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useDisabledBoundary.js"); /* harmony import */ var _useFieldFormat__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./useFieldFormat */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useFieldFormat.js"); /* harmony import */ var _useInputReadOnly__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./useInputReadOnly */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useInputReadOnly.js"); /* harmony import */ var _useInvalidate__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./useInvalidate */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useInvalidate.js"); function useList(value) { var fillMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var values = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { var list = value ? (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_6__.toArray)(value) : value; if (fillMode && list) { list[1] = list[1] || list[0]; } return list; }, [value, fillMode]); return values; } /** * Align the outer props with unique typed and fill undefined props. * This is shared with both RangePicker and Picker. This will do: * - Convert `value` & `defaultValue` to array * - handle the legacy props fill like `clearIcon` + `allowClear` = `clearIcon` */ function useFilledProps(props, updater) { var generateConfig = props.generateConfig, locale = props.locale, _props$picker = props.picker, picker = _props$picker === void 0 ? 'date' : _props$picker, _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? 'rc-picker' : _props$prefixCls, _props$styles = props.styles, styles = _props$styles === void 0 ? {} : _props$styles, _props$classNames = props.classNames, classNames = _props$classNames === void 0 ? {} : _props$classNames, _props$order = props.order, order = _props$order === void 0 ? true : _props$order, _props$components = props.components, components = _props$components === void 0 ? {} : _props$components, inputRender = props.inputRender, allowClear = props.allowClear, clearIcon = props.clearIcon, needConfirm = props.needConfirm, multiple = props.multiple, format = props.format, inputReadOnly = props.inputReadOnly, disabledDate = props.disabledDate, minDate = props.minDate, maxDate = props.maxDate, showTime = props.showTime, value = props.value, defaultValue = props.defaultValue, pickerValue = props.pickerValue, defaultPickerValue = props.defaultPickerValue; var values = useList(value); var defaultValues = useList(defaultValue); var pickerValues = useList(pickerValue); var defaultPickerValues = useList(defaultPickerValue); // ======================== Picker ======================== /** Almost same as `picker`, but add `datetime` for `date` with `showTime` */ var internalPicker = picker === 'date' && showTime ? 'datetime' : picker; /** The picker is `datetime` or `time` */ var multipleInteractivePicker = internalPicker === 'time' || internalPicker === 'datetime'; var complexPicker = multipleInteractivePicker || multiple; var mergedNeedConfirm = needConfirm !== null && needConfirm !== void 0 ? needConfirm : multipleInteractivePicker; // ========================== Time ========================== // Auto `format` need to check `showTime.showXXX` first. // And then merge the `locale` into `mergedShowTime`. var _getTimeProps = (0,_hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_5__.getTimeProps)(props), _getTimeProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getTimeProps, 4), timeProps = _getTimeProps2[0], localeTimeProps = _getTimeProps2[1], showTimeFormat = _getTimeProps2[2], propFormat = _getTimeProps2[3]; // ======================= Locales ======================== var mergedLocale = (0,_hooks_useLocale__WEBPACK_IMPORTED_MODULE_4__["default"])(locale, localeTimeProps); var mergedShowTime = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return (0,_hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_5__.fillShowTimeConfig)(internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale); }, [internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale]); // ======================= Warning ======================== if ( true && picker === 'time') { if (['disabledHours', 'disabledMinutes', 'disabledSeconds'].some(function (key) { return props[key]; })) { (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(false, "'disabledHours', 'disabledMinutes', 'disabledSeconds' will be removed in the next major version, please use 'disabledTime' instead."); } } // ======================== Props ========================= var filledProps = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props), {}, { prefixCls: prefixCls, locale: mergedLocale, picker: picker, styles: styles, classNames: classNames, order: order, components: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ input: inputRender }, components), clearIcon: (0,_Selector_hooks_useClearIcon__WEBPACK_IMPORTED_MODULE_7__.fillClearIcon)(prefixCls, allowClear, clearIcon), showTime: mergedShowTime, value: values, defaultValue: defaultValues, pickerValue: pickerValues, defaultPickerValue: defaultPickerValues }, updater === null || updater === void 0 ? void 0 : updater()); }, [props]); // ======================== Format ======================== var _useFieldFormat = (0,_useFieldFormat__WEBPACK_IMPORTED_MODULE_9__.useFieldFormat)(internalPicker, mergedLocale, format), _useFieldFormat2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useFieldFormat, 2), formatList = _useFieldFormat2[0], maskFormat = _useFieldFormat2[1]; // ======================= ReadOnly ======================= var mergedInputReadOnly = (0,_useInputReadOnly__WEBPACK_IMPORTED_MODULE_10__["default"])(formatList, inputReadOnly, multiple); // ======================= Boundary ======================= var disabledBoundaryDate = (0,_useDisabledBoundary__WEBPACK_IMPORTED_MODULE_8__["default"])(generateConfig, locale, disabledDate, minDate, maxDate); // ====================== Invalidate ====================== var isInvalidateDate = (0,_useInvalidate__WEBPACK_IMPORTED_MODULE_11__["default"])(generateConfig, picker, disabledBoundaryDate, mergedShowTime); // ======================== Merged ======================== var mergedProps = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, filledProps), {}, { needConfirm: mergedNeedConfirm, inputReadOnly: mergedInputReadOnly, disabledDate: disabledBoundaryDate }); }, [filledProps, mergedNeedConfirm, mergedInputReadOnly, disabledBoundaryDate]); return [mergedProps, internalPicker, complexPicker, formatList, maskFormat, isInvalidateDate]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useInputReadOnly.js": /*!********************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useInputReadOnly.js ***! \********************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useInputReadOnly) /* harmony export */ }); function useInputReadOnly(formatList, inputReadOnly, multiple) { if (typeof formatList[0] === 'function' || multiple) { return true; } return inputReadOnly; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useInvalidate.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useInvalidate.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useInvalidate) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /** * Check if provided date is valid for the `disabledDate` & `showTime.disabledTime`. */ function useInvalidate(generateConfig, picker, disabledDate, showTime) { // Check disabled date var isInvalidate = (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.useEvent)(function (date, info) { var outsideInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ type: picker }, info); delete outsideInfo.activeIndex; if ( // Date object is invalid !generateConfig.isValidate(date) || // Date is disabled by `disabledDate` disabledDate && disabledDate(date, outsideInfo)) { return true; } if ((picker === 'date' || picker === 'time') && showTime) { var _showTime$disabledTim; var range = info && info.activeIndex === 1 ? 'end' : 'start'; var _ref = ((_showTime$disabledTim = showTime.disabledTime) === null || _showTime$disabledTim === void 0 ? void 0 : _showTime$disabledTim.call(showTime, date, range, { from: outsideInfo.from })) || {}, disabledHours = _ref.disabledHours, disabledMinutes = _ref.disabledMinutes, disabledSeconds = _ref.disabledSeconds, disabledMilliseconds = _ref.disabledMilliseconds; var legacyDisabledHours = showTime.disabledHours, legacyDisabledMinutes = showTime.disabledMinutes, legacyDisabledSeconds = showTime.disabledSeconds; var mergedDisabledHours = disabledHours || legacyDisabledHours; var mergedDisabledMinutes = disabledMinutes || legacyDisabledMinutes; var mergedDisabledSeconds = disabledSeconds || legacyDisabledSeconds; var hour = generateConfig.getHour(date); var minute = generateConfig.getMinute(date); var second = generateConfig.getSecond(date); var millisecond = generateConfig.getMillisecond(date); if (mergedDisabledHours && mergedDisabledHours().includes(hour)) { return true; } if (mergedDisabledMinutes && mergedDisabledMinutes(hour).includes(minute)) { return true; } if (mergedDisabledSeconds && mergedDisabledSeconds(hour, minute).includes(second)) { return true; } if (disabledMilliseconds && disabledMilliseconds(hour, minute, second).includes(millisecond)) { return true; } } return false; }); return isInvalidate; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useLockEffect) /* harmony export */ }); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /** * Trigger `callback` immediately when `condition` is `true`. * But trigger `callback` in next frame when `condition` is `false`. */ function useLockEffect(condition, callback) { var delayFrames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; var callbackRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(callback); callbackRef.current = callback; (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_0__.useLayoutUpdateEffect)(function () { if (condition) { callbackRef.current(condition); } else { var id = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(function () { callbackRef.current(condition); }, delayFrames); return function () { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"].cancel(id); }; } }, [condition]); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useOpen.js": /*!***********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useOpen.js ***! \***********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useOpen) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _useDelayState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useDelayState */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useDelayState.js"); /** * Control the open state. * Will not close if activeElement is on the popup. */ function useOpen(open, defaultOpen) { var disabledList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; var onOpenChange = arguments.length > 3 ? arguments[3] : undefined; var mergedOpen = disabledList.every(function (disabled) { return disabled; }) ? false : open; // Delay for handle the open state, in case fast shift from `open` -> `close` -> `open` // const [rafOpen, setRafOpen] = useLockState(open, defaultOpen || false, onOpenChange); var _useDelayState = (0,_useDelayState__WEBPACK_IMPORTED_MODULE_1__["default"])(mergedOpen, defaultOpen || false, onOpenChange), _useDelayState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useDelayState, 2), rafOpen = _useDelayState2[0], setRafOpen = _useDelayState2[1]; function setOpen(next) { var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!config.inherit || rafOpen) { setRafOpen(next, config.force); } } return [rafOpen, setOpen]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/usePickerRef.js": /*!****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/usePickerRef.js ***! \****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ usePickerRef) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); function usePickerRef(ref) { var selectorRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(); react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle(ref, function () { var _selectorRef$current; return { nativeElement: (_selectorRef$current = selectorRef.current) === null || _selectorRef$current === void 0 ? void 0 : _selectorRef$current.nativeElement, focus: function focus(options) { var _selectorRef$current2; (_selectorRef$current2 = selectorRef.current) === null || _selectorRef$current2 === void 0 || _selectorRef$current2.focus(options); }, blur: function blur() { var _selectorRef$current3; (_selectorRef$current3 = selectorRef.current) === null || _selectorRef$current3 === void 0 || _selectorRef$current3.blur(); } }; }); return selectorRef; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/usePresets.js": /*!**************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/usePresets.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ usePresets) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); function usePresets(presets, legacyRanges) { return react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { if (presets) { return presets; } if (legacyRanges) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_2__["default"])(false, '`ranges` is deprecated. Please use `presets` instead.'); return Object.entries(legacyRanges).map(function (_ref) { var _ref2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, 2), label = _ref2[0], value = _ref2[1]; return { label: label, value: value }; }); } return []; }, [presets, legacyRanges]); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeActive.js": /*!******************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeActive.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useRangeActive) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _useLockEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useLockEffect */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js"); /** * When user first focus one input, any submit will trigger focus another one. * When second time focus one input, submit will not trigger focus again. * When click outside to close the panel, trigger event if it can trigger onChange. */ function useRangeActive(disabled) { var empty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var mergedOpen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState(0), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2), activeIndex = _React$useState2[0], setActiveIndex = _React$useState2[1]; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_1__.useState(false), _React$useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState3, 2), focused = _React$useState4[0], setFocused = _React$useState4[1]; var activeListRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef([]); var submitIndexRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null); var lastOperationRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(null); var updateSubmitIndex = function updateSubmitIndex(index) { submitIndexRef.current = index; }; var hasActiveSubmitValue = function hasActiveSubmitValue(index) { return submitIndexRef.current === index; }; var triggerFocus = function triggerFocus(nextFocus) { setFocused(nextFocus); }; // ============================= Record ============================= var lastOperation = function lastOperation(type) { if (type) { lastOperationRef.current = type; } return lastOperationRef.current; }; // ============================ Strategy ============================ // Trigger when input enter or input blur or panel close var nextActiveIndex = function nextActiveIndex(nextValue) { var list = activeListRef.current; var filledActiveSet = new Set(list.filter(function (index) { return nextValue[index] || empty[index]; })); var nextIndex = list[list.length - 1] === 0 ? 1 : 0; if (filledActiveSet.size >= 2 || disabled[nextIndex]) { return null; } return nextIndex; }; // ============================= Effect ============================= // Wait in case it's from the click outside to blur (0,_useLockEffect__WEBPACK_IMPORTED_MODULE_2__["default"])(focused || mergedOpen, function () { if (!focused) { activeListRef.current = []; updateSubmitIndex(null); } }); react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () { if (focused) { activeListRef.current.push(activeIndex); } }, [focused, activeIndex]); return [focused, triggerFocus, lastOperation, activeIndex, setActiveIndex, nextActiveIndex, activeListRef.current, updateSubmitIndex, hasActiveSubmitValue]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeDisabledDate.js": /*!************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeDisabledDate.js ***! \************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useRangeDisabledDate) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /** * RangePicker need additional logic to handle the `disabled` case. e.g. * [disabled, enabled] should end date not before start date */ function useRangeDisabledDate(values, disabled, activeIndexList, generateConfig, locale, disabledDate) { var activeIndex = activeIndexList[activeIndexList.length - 1]; var rangeDisabledDate = function rangeDisabledDate(date, info) { var _values = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(values, 2), start = _values[0], end = _values[1]; var mergedInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, info), {}, { from: (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.getFromDate)(values, activeIndexList) }); // ============================ Disabled ============================ // Should not select days before the start date if (activeIndex === 1 && disabled[0] && start && // Same date isOK !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__.isSame)(generateConfig, locale, start, date, mergedInfo.type) && // Before start date generateConfig.isAfter(start, date)) { return true; } // Should not select days after the end date if (activeIndex === 0 && disabled[1] && end && // Same date isOK !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__.isSame)(generateConfig, locale, end, date, mergedInfo.type) && // After end date generateConfig.isAfter(date, end)) { return true; } // ============================= Origin ============================= return disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date, mergedInfo); }; return rangeDisabledDate; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js": /*!***********************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js ***! \***********************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useRangePickerValue), /* harmony export */ offsetPanelDate: () => (/* binding */ offsetPanelDate) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); function offsetPanelDate(generateConfig, picker, date, offset) { switch (picker) { case 'date': case 'week': return generateConfig.addMonth(date, offset); case 'month': case 'quarter': return generateConfig.addYear(date, offset); case 'year': return generateConfig.addYear(date, offset * 10); case 'decade': return generateConfig.addYear(date, offset * 100); default: return date; } } var EMPTY_LIST = []; function useRangePickerValue(generateConfig, locale, calendarValue, modes, open, activeIndex, pickerMode, multiplePanel) { var defaultPickerValue = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : EMPTY_LIST; var pickerValue = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : EMPTY_LIST; var timeDefaultValue = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : EMPTY_LIST; var onPickerValueChange = arguments.length > 11 ? arguments[11] : undefined; var minDate = arguments.length > 12 ? arguments[12] : undefined; var maxDate = arguments.length > 13 ? arguments[13] : undefined; var isTimePicker = pickerMode === 'time'; // ======================== Active ======================== // `activeIndex` must be valid to avoid getting empty `pickerValue` var mergedActiveIndex = activeIndex || 0; // ===================== Picker Value ===================== var getDefaultPickerValue = function getDefaultPickerValue(index) { var now = generateConfig.getNow(); if (isTimePicker) { now = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.fillTime)(generateConfig, now); } return defaultPickerValue[index] || calendarValue[index] || now; }; // Align `pickerValue` with `showTime.defaultValue` var _pickerValue = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(pickerValue, 2), startPickerValue = _pickerValue[0], endPickerValue = _pickerValue[1]; // PickerValue state var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.useMergedState)(function () { return getDefaultPickerValue(0); }, { value: startPickerValue }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState, 2), mergedStartPickerValue = _useMergedState2[0], setStartPickerValue = _useMergedState2[1]; var _useMergedState3 = (0,rc_util__WEBPACK_IMPORTED_MODULE_1__.useMergedState)(function () { return getDefaultPickerValue(1); }, { value: endPickerValue }), _useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState3, 2), mergedEndPickerValue = _useMergedState4[0], setEndPickerValue = _useMergedState4[1]; // Current PickerValue var currentPickerValue = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { var current = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex]; // Merge the `showTime.defaultValue` into `pickerValue` return isTimePicker ? current : (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.fillTime)(generateConfig, current, timeDefaultValue[mergedActiveIndex]); }, [isTimePicker, mergedStartPickerValue, mergedEndPickerValue, mergedActiveIndex, generateConfig, timeDefaultValue]); var setCurrentPickerValue = function setCurrentPickerValue(nextPickerValue) { var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'panel'; var updater = [setStartPickerValue, setEndPickerValue][mergedActiveIndex]; updater(nextPickerValue); var clone = [mergedStartPickerValue, mergedEndPickerValue]; clone[mergedActiveIndex] = nextPickerValue; if (onPickerValueChange && (!(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSame)(generateConfig, locale, mergedStartPickerValue, clone[0], pickerMode) || !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSame)(generateConfig, locale, mergedEndPickerValue, clone[1], pickerMode))) { onPickerValueChange(clone, { source: source, range: mergedActiveIndex === 1 ? 'end' : 'start', mode: modes }); } }; // ======================== Effect ======================== /** * EndDate pickerValue is little different. It should be: * - If date picker (without time), endDate is not same year & month as startDate * - pickerValue minus one month * - Else pass directly */ var getEndDatePickerValue = function getEndDatePickerValue(startDate, endDate) { if (multiplePanel) { // Basic offset var SAME_CHECKER = { date: 'month', week: 'month', month: 'year', quarter: 'year' }; var mode = SAME_CHECKER[pickerMode]; if (mode && !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSame)(generateConfig, locale, startDate, endDate, mode)) { return offsetPanelDate(generateConfig, pickerMode, endDate, -1); } // Year offset if (pickerMode === 'year' && startDate) { var srcYear = Math.floor(generateConfig.getYear(startDate) / 10); var tgtYear = Math.floor(generateConfig.getYear(endDate) / 10); if (srcYear !== tgtYear) { return offsetPanelDate(generateConfig, pickerMode, endDate, -1); } } } return endDate; }; // >>> When switch field, reset the picker value as prev field picker value var prevActiveIndexRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(null); (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_2__["default"])(function () { if (open) { if (!defaultPickerValue[mergedActiveIndex]) { var nextPickerValue = isTimePicker ? null : generateConfig.getNow(); /** * 1. If has prevActiveIndex, use it to avoid panel jump * 2. If current field has value * - If `activeIndex` is 1 and `calendarValue[0]` is not same panel as `calendarValue[1]`, * offset `calendarValue[1]` and set it * - Else use `calendarValue[activeIndex]` * 3. If current field has no value but another field has value, use another field value * 4. Else use now (not any `calendarValue` can ref) */ if (prevActiveIndexRef.current !== null && prevActiveIndexRef.current !== mergedActiveIndex) { // If from another field, not jump picker value nextPickerValue = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex ^ 1]; } else if (calendarValue[mergedActiveIndex]) { // Current field has value nextPickerValue = mergedActiveIndex === 0 ? calendarValue[0] : getEndDatePickerValue(calendarValue[0], calendarValue[1]); } else if (calendarValue[mergedActiveIndex ^ 1]) { // Current field has no value but another field has value nextPickerValue = calendarValue[mergedActiveIndex ^ 1]; } // Only sync when has value, this will sync in the `min-max` logic if (nextPickerValue) { // nextPickerValue < minDate if (minDate && generateConfig.isAfter(minDate, nextPickerValue)) { nextPickerValue = minDate; } // maxDate < nextPickerValue var offsetPickerValue = multiplePanel ? offsetPanelDate(generateConfig, pickerMode, nextPickerValue, 1) : nextPickerValue; if (maxDate && generateConfig.isAfter(offsetPickerValue, maxDate)) { nextPickerValue = multiplePanel ? offsetPanelDate(generateConfig, pickerMode, maxDate, -1) : maxDate; } setCurrentPickerValue(nextPickerValue, 'reset'); } } } }, [open, mergedActiveIndex, calendarValue[mergedActiveIndex]]); // >>> Reset prevActiveIndex when panel closed react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { if (open) { prevActiveIndexRef.current = mergedActiveIndex; } else { prevActiveIndexRef.current = null; } }, [open, mergedActiveIndex]); // >>> defaultPickerValue: Resync to `defaultPickerValue` for each panel focused (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_2__["default"])(function () { if (open && defaultPickerValue) { if (defaultPickerValue[mergedActiveIndex]) { setCurrentPickerValue(defaultPickerValue[mergedActiveIndex], 'reset'); } } }, [open, mergedActiveIndex]); return [currentPickerValue, setCurrentPickerValue]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeValue.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useRangeValue.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useRangeValue), /* harmony export */ useInnerValue: () => (/* binding */ useInnerValue) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _hooks_useSyncState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/useSyncState */ "../../../node_modules/rc-picker/es/hooks/useSyncState.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _useLockEffect__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./useLockEffect */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js"); var EMPTY_VALUE = []; // Submit Logic: // * ✅ Value: // * merged value using controlled value, if not, use stateValue // * When merged value change, [1] resync calendar value and submit value // * ✅ Calender Value: // * 💻 When user typing is validate, change the calendar value // * 🌅 When user click on the panel, change the calendar value // * Submit Value: // * 💻 When user blur the input, flush calendar value to submit value // * 🌅 When user click on the panel is no needConfirm, flush calendar value to submit value // * 🌅 When user click on the panel is needConfirm and click OK, flush calendar value to submit value // * Blur logic & close logic: // * ✅ For value, always try flush submit // * ✅ If `needConfirm`, reset as [1] // * Else (`!needConfirm`) // * If has another index field, active another index // * ✅ Flush submit: // * If all the start & end field is confirmed or all blur or panel closed // * Update `needSubmit` mark to true // * trigger onChange by `needSubmit` and update stateValue function useUtil(generateConfig, locale, formatList) { var getDateTexts = function getDateTexts(dates) { return dates.map(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.formatValue)(date, { generateConfig: generateConfig, locale: locale, format: formatList[0] }); }); }; var isSameDates = function isSameDates(source, target) { var maxLen = Math.max(source.length, target.length); var diffIndex = -1; for (var i = 0; i < maxLen; i += 1) { var prev = source[i] || null; var next = target[i] || null; if (prev !== next && !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameTimestamp)(generateConfig, prev, next)) { diffIndex = i; break; } } return [diffIndex < 0, diffIndex !== 0]; }; return [getDateTexts, isSameDates]; } function orderDates(dates, generateConfig) { return (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(dates).sort(function (a, b) { return generateConfig.isAfter(a, b) ? 1 : -1; }); } /** * Used for internal value management. * It should always use `mergedValue` in render logic */ function useCalendarValue(mergedValue) { var _useSyncState = (0,_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_4__["default"])(mergedValue), _useSyncState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useSyncState, 2), calendarValue = _useSyncState2[0], setCalendarValue = _useSyncState2[1]; /** Sync calendarValue & submitValue back with value */ var syncWithValue = (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.useEvent)(function () { setCalendarValue(mergedValue); }); react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { syncWithValue(); }, [mergedValue]); return [calendarValue, setCalendarValue]; } /** * Control the internal `value` align with prop `value` and provide a temp `calendarValue` for ui. * `calendarValue` will be reset when blur & focus & open. */ function useInnerValue(generateConfig, locale, formatList, /** Used for RangePicker. `true` means [DateType, DateType] or will be DateType[] */ rangeValue, /** * Trigger order when trigger calendar value change. * This should only used in SinglePicker with `multiple` mode. * So when `rangeValue` is `true`, order will be ignored. */ order, defaultValue, value, onCalendarChange, onOk) { // This is the root value which will sync with controlled or uncontrolled value var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.useMergedState)(defaultValue, { value: value }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useMergedState, 2), innerValue = _useMergedState2[0], setInnerValue = _useMergedState2[1]; var mergedValue = innerValue || EMPTY_VALUE; // ========================= Inner Values ========================= var _useCalendarValue = useCalendarValue(mergedValue), _useCalendarValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useCalendarValue, 2), calendarValue = _useCalendarValue2[0], setCalendarValue = _useCalendarValue2[1]; // ============================ Change ============================ var _useUtil = useUtil(generateConfig, locale, formatList), _useUtil2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useUtil, 2), getDateTexts = _useUtil2[0], isSameDates = _useUtil2[1]; var triggerCalendarChange = (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.useEvent)(function (nextCalendarValues) { var clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(nextCalendarValues); if (rangeValue) { for (var i = 0; i < 2; i += 1) { clone[i] = clone[i] || null; } } else if (order) { clone = orderDates(clone.filter(function (date) { return date; }), generateConfig); } // Update merged value var _isSameDates = isSameDates(calendarValue(), clone), _isSameDates2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_isSameDates, 2), isSameMergedDates = _isSameDates2[0], isSameStart = _isSameDates2[1]; if (!isSameMergedDates) { setCalendarValue(clone); // Trigger calendar change event if (onCalendarChange) { var cellTexts = getDateTexts(clone); onCalendarChange(clone, cellTexts, { range: isSameStart ? 'end' : 'start' }); } } }); var triggerOk = function triggerOk() { if (onOk) { onOk(calendarValue()); } }; return [mergedValue, setInnerValue, calendarValue, triggerCalendarChange, triggerOk]; } function useRangeValue(info, mergedValue, setInnerValue, getCalendarValue, triggerCalendarChange, disabled, formatList, focused, open, isInvalidateDate) { var generateConfig = info.generateConfig, locale = info.locale, picker = info.picker, onChange = info.onChange, allowEmpty = info.allowEmpty, order = info.order; var orderOnChange = disabled.some(function (d) { return d; }) ? false : order; // ============================= Util ============================= var _useUtil3 = useUtil(generateConfig, locale, formatList), _useUtil4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useUtil3, 2), getDateTexts = _useUtil4[0], isSameDates = _useUtil4[1]; // ============================ Values ============================ // Used for trigger `onChange` event. // Record current value which is wait for submit. var _useSyncState3 = (0,_hooks_useSyncState__WEBPACK_IMPORTED_MODULE_4__["default"])(mergedValue), _useSyncState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useSyncState3, 2), submitValue = _useSyncState4[0], setSubmitValue = _useSyncState4[1]; /** Sync calendarValue & submitValue back with value */ var syncWithValue = (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.useEvent)(function () { setSubmitValue(mergedValue); }); react__WEBPACK_IMPORTED_MODULE_3__.useEffect(function () { syncWithValue(); }, [mergedValue]); // ============================ Submit ============================ var triggerSubmit = (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.useEvent)(function (nextValue) { var isNullValue = nextValue === null; var clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(nextValue || submitValue()); // Fill null value if (isNullValue) { var maxLen = Math.max(disabled.length, clone.length); for (var i = 0; i < maxLen; i += 1) { if (!disabled[i]) { clone[i] = null; } } } // Only when exist value to sort if (orderOnChange && clone[0] && clone[1]) { clone = orderDates(clone, generateConfig); } // Sync `calendarValue` triggerCalendarChange(clone); // ========= Validate check ========= var _clone = clone, _clone2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_clone, 2), start = _clone2[0], end = _clone2[1]; // >>> Empty var startEmpty = !start; var endEmpty = !end; var validateEmptyDateRange = allowEmpty ? // Validate empty start (!startEmpty || allowEmpty[0]) && ( // Validate empty end !endEmpty || allowEmpty[1]) : true; // >>> Order var validateOrder = !order || startEmpty || endEmpty || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSame)(generateConfig, locale, start, end, picker) || generateConfig.isAfter(end, start); // >>> Invalid var validateDates = // Validate start (disabled[0] || !start || !isInvalidateDate(start, { activeIndex: 0 })) && ( // Validate end disabled[1] || !end || !isInvalidateDate(end, { from: start, activeIndex: 1 })); // >>> Result var allPassed = // Null value is from clear button isNullValue || // Normal check validateEmptyDateRange && validateOrder && validateDates; if (allPassed) { // Sync value with submit value setInnerValue(clone); var _isSameDates3 = isSameDates(clone, mergedValue), _isSameDates4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_isSameDates3, 1), isSameMergedDates = _isSameDates4[0]; // Trigger `onChange` if needed if (onChange && !isSameMergedDates) { onChange( // Return null directly if all date are empty isNullValue && clone.every(function (val) { return !val; }) ? null : clone, getDateTexts(clone)); } } return allPassed; }); // ========================= Flush Submit ========================= var flushSubmit = (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.useEvent)(function (index, needTriggerChange) { var nextSubmitValue = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_6__.fillIndex)(submitValue(), index, getCalendarValue()[index]); setSubmitValue(nextSubmitValue); if (needTriggerChange) { triggerSubmit(); } }); // ============================ Effect ============================ // All finished action trigger after 2 frames var interactiveFinished = !focused && !open; (0,_useLockEffect__WEBPACK_IMPORTED_MODULE_7__["default"])(!interactiveFinished, function () { if (interactiveFinished) { // Always try to trigger submit first triggerSubmit(); // Trigger calendar change since this is a effect reset // https://github.com/ant-design/ant-design/issues/22351 triggerCalendarChange(mergedValue); // Sync with value anyway syncWithValue(); } }, 2); // ============================ Return ============================ return [flushSubmit, triggerSubmit]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerInput/hooks/useShowNow.js": /*!**************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerInput/hooks/useShowNow.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useShowNow) /* harmony export */ }); function useShowNow(picker, mode, showNow, showToday, rangePicker) { if (mode !== 'date' && mode !== 'time') { return false; } if (showNow !== undefined) { return showNow; } // Compatible with old version `showToday` if (showToday !== undefined) { return showToday; } return !rangePicker && (picker === 'date' || picker === 'time'); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ DatePanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function DatePanel(props) { var prefixCls = props.prefixCls, _props$panelName = props.panelName, panelName = _props$panelName === void 0 ? 'date' : _props$panelName, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, onPickerValueChange = props.onPickerValueChange, onModeChange = props.onModeChange, _props$mode = props.mode, mode = _props$mode === void 0 ? 'date' : _props$mode, disabledDate = props.disabledDate, onSelect = props.onSelect, onHover = props.onHover, showWeek = props.showWeek; var panelPrefixCls = "".concat(prefixCls, "-").concat(panelName, "-panel"); var cellPrefixCls = "".concat(prefixCls, "-cell"); var isWeek = mode === 'week'; // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_6__.useInfo)(props, mode), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 2), info = _useInfo2[0], now = _useInfo2[1]; var weekFirstDay = generateConfig.locale.getWeekFirstDay(locale.locale); var monthStartDate = generateConfig.setDate(pickerValue, 1); var baseDate = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.getWeekStartDate)(locale.locale, generateConfig, monthStartDate); var month = generateConfig.getMonth(pickerValue); // =========================== PrefixColumn =========================== var showPrefixColumn = showWeek === undefined ? isWeek : showWeek; var prefixColumn = showPrefixColumn ? function (date) { // >>> Additional check for disabled var disabled = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date, { type: 'week' }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("td", { key: "week", className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(cellPrefixCls, "".concat(cellPrefixCls, "-week"), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(cellPrefixCls, "-disabled"), disabled)) // Operation: Same as code in PanelBody , onClick: function onClick() { if (!disabled) { onSelect(date); } }, onMouseEnter: function onMouseEnter() { if (!disabled) { onHover === null || onHover === void 0 || onHover(date); } }, onMouseLeave: function onMouseLeave() { if (!disabled) { onHover === null || onHover === void 0 || onHover(null); } } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", { className: "".concat(cellPrefixCls, "-inner") }, generateConfig.locale.getWeek(locale.locale, date))); } : null; // ========================= Cells ========================== // >>> Header Cells var headerCells = []; var weekDaysLocale = locale.shortWeekDays || (generateConfig.locale.getShortWeekDays ? generateConfig.locale.getShortWeekDays(locale.locale) : []); if (prefixColumn) { headerCells.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("th", { key: "empty" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("span", { style: { width: 0, height: 0, position: 'absolute', overflow: 'hidden', opacity: 0 } }, locale.week))); } for (var i = 0; i < _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.WEEK_DAY_COUNT; i += 1) { headerCells.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("th", { key: i }, weekDaysLocale[(i + weekFirstDay) % _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.WEEK_DAY_COUNT])); } // >>> Body Cells var getCellDate = function getCellDate(date, offset) { return generateConfig.addDate(date, offset); }; var getCellText = function getCellText(date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.formatValue)(date, { locale: locale, format: locale.cellDateFormat, generateConfig: generateConfig }); }; var getCellClassName = function getCellClassName(date) { var classObj = (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameMonth)(generateConfig, date, pickerValue)), "".concat(prefixCls, "-cell-today"), (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameDate)(generateConfig, date, now)); return classObj; }; // ========================= Header ========================= var monthsLocale = locale.shortMonths || (generateConfig.locale.getShortMonths ? generateConfig.locale.getShortMonths(locale.locale) : []); var yearNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("button", { type: "button", "aria-label": locale.yearSelect, key: "year", onClick: function onClick() { onModeChange('year', pickerValue); }, tabIndex: -1, className: "".concat(prefixCls, "-year-btn") }, (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.formatValue)(pickerValue, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); var monthNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("button", { type: "button", "aria-label": locale.monthSelect, key: "month", onClick: function onClick() { onModeChange('month', pickerValue); }, tabIndex: -1, className: "".concat(prefixCls, "-month-btn") }, locale.monthFormat ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.formatValue)(pickerValue, { locale: locale, format: locale.monthFormat, generateConfig: generateConfig }) : monthsLocale[month]); var monthYearNodes = locale.monthBeforeYear ? [monthNode, yearNode] : [yearNode, monthNode]; // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_context__WEBPACK_IMPORTED_MODULE_6__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(panelPrefixCls, showWeek && "".concat(panelPrefixCls, "-show-week")) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_8__["default"], { offset: function offset(distance) { return generateConfig.addMonth(pickerValue, distance); }, superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance); }, onChange: onPickerValueChange // Limitation , getStart: function getStart(date) { return generateConfig.setDate(date, 1); }, getEnd: function getEnd(date) { var clone = generateConfig.setDate(date, 1); clone = generateConfig.addMonth(clone, 1); return generateConfig.addDate(clone, -1); } }, monthYearNodes), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_7__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ titleFormat: locale.fieldDateFormat }, props, { colNum: _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.WEEK_DAY_COUNT, rowNum: 6, baseDate: baseDate // Header , headerCells: headerCells // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName, prefixColumn: prefixColumn, cellSelection: !isWeek })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/DateTimePanel/index.js": /*!*****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/DateTimePanel/index.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ DateTimePanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/useTimeInfo */ "../../../node_modules/rc-picker/es/hooks/useTimeInfo.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _DatePanel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../DatePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js"); /* harmony import */ var _TimePanel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../TimePanel */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js"); function DateTimePanel(props) { var prefixCls = props.prefixCls, generateConfig = props.generateConfig, showTime = props.showTime, onSelect = props.onSelect, value = props.value, pickerValue = props.pickerValue, onHover = props.onHover; var panelPrefixCls = "".concat(prefixCls, "-datetime-panel"); // =============================== Time =============================== var _useTimeInfo = (0,_hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__["default"])(generateConfig, showTime), _useTimeInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useTimeInfo, 1), getValidTime = _useTimeInfo2[0]; // Merge the time info from `value` or `pickerValue` var mergeTime = function mergeTime(date) { if (value) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.fillTime)(generateConfig, date, value); } return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.fillTime)(generateConfig, date, pickerValue); }; // ============================== Hover =============================== var onDateHover = function onDateHover(date) { onHover === null || onHover === void 0 || onHover(date ? mergeTime(date) : date); }; // ============================== Select ============================== var onDateSelect = function onDateSelect(date) { // Merge with current time var cloneDate = mergeTime(date); onSelect(getValidTime(cloneDate, cloneDate)); }; // ============================== Render ============================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_DatePanel__WEBPACK_IMPORTED_MODULE_5__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { onSelect: onDateSelect, onHover: onDateHover })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimePanel__WEBPACK_IMPORTED_MODULE_6__["default"], props)); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/DecadePanel/index.js": /*!***************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/DecadePanel/index.js ***! \***************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ DecadePanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function DecadePanel(props) { var prefixCls = props.prefixCls, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, disabledDate = props.disabledDate, onPickerValueChange = props.onPickerValueChange; var panelPrefixCls = "".concat(prefixCls, "-decade-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useInfo)(props, 'decade'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 1), info = _useInfo2[0]; var getStartYear = function getStartYear(date) { var startYear = Math.floor(generateConfig.getYear(date) / 100) * 100; return generateConfig.setYear(date, startYear); }; var getEndYear = function getEndYear(date) { var startYear = getStartYear(date); return generateConfig.addYear(startYear, 99); }; var startYearDate = getStartYear(pickerValue); var endYearDate = getEndYear(pickerValue); var baseDate = generateConfig.addYear(startYearDate, -10); // ========================= Cells ========================== var getCellDate = function getCellDate(date, offset) { return generateConfig.addYear(date, offset * 10); }; var getCellText = function getCellText(date) { var cellYearFormat = locale.cellYearFormat; var startYearStr = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: cellYearFormat, generateConfig: generateConfig }); var endYearStr = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(generateConfig.addYear(date, 9), { locale: locale, format: cellYearFormat, generateConfig: generateConfig }); return "".concat(startYearStr, "-").concat(endYearStr); }; var getCellClassName = function getCellClassName(date) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSameDecade)(generateConfig, date, startYearDate) || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSameDecade)(generateConfig, date, endYearDate) || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isInRange)(generateConfig, startYearDate, endYearDate, date)); }; // ======================== Disabled ======================== var mergedDisabledDate = disabledDate ? function (currentDate, disabledInfo) { // Start var baseStartDate = generateConfig.setDate(currentDate, 1); var baseStartMonth = generateConfig.setMonth(baseStartDate, 0); var baseStartYear = generateConfig.setYear(baseStartMonth, Math.floor(generateConfig.getYear(baseStartMonth) / 10) * 10); // End var baseEndYear = generateConfig.addYear(baseStartYear, 10); var baseEndDate = generateConfig.addDate(baseEndYear, -1); return disabledDate(baseStartYear, disabledInfo) && disabledDate(baseEndDate, disabledInfo); } : null; // ========================= Header ========================= var yearNode = "".concat((0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(startYearDate, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig }), "-").concat((0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(endYearDate, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context__WEBPACK_IMPORTED_MODULE_5__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_7__["default"], { superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance * 100); }, onChange: onPickerValueChange // Limitation , getStart: getStartYear, getEnd: getEndYear }, yearNode), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { disabledDate: mergedDisabledDate, colNum: 3, rowNum: 4, baseDate: baseDate // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/MonthPanel/index.js": /*!**************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/MonthPanel/index.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ MonthPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function MonthPanel(props) { var prefixCls = props.prefixCls, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, disabledDate = props.disabledDate, onPickerValueChange = props.onPickerValueChange, onModeChange = props.onModeChange; var panelPrefixCls = "".concat(prefixCls, "-month-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useInfo)(props, 'month'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 1), info = _useInfo2[0]; var baseDate = generateConfig.setMonth(pickerValue, 0); // ========================= Month ========================== var monthsLocale = locale.shortMonths || (generateConfig.locale.getShortMonths ? generateConfig.locale.getShortMonths(locale.locale) : []); // ========================= Cells ========================== var getCellDate = function getCellDate(date, offset) { return generateConfig.addMonth(date, offset); }; var getCellText = function getCellText(date) { var month = generateConfig.getMonth(date); return locale.monthFormat ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: locale.monthFormat, generateConfig: generateConfig }) : monthsLocale[month]; }; var getCellClassName = function getCellClassName() { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), true); }; // ======================== Disabled ======================== var mergedDisabledDate = disabledDate ? function (currentDate, disabledInfo) { var startDate = generateConfig.setDate(currentDate, 1); var nextMonthStartDate = generateConfig.setMonth(startDate, generateConfig.getMonth(startDate) + 1); var endDate = generateConfig.addDate(nextMonthStartDate, -1); return disabledDate(startDate, disabledInfo) && disabledDate(endDate, disabledInfo); } : null; // ========================= Header ========================= var yearNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("button", { type: "button", key: "year", "aria-label": locale.yearSelect, onClick: function onClick() { onModeChange('year'); }, tabIndex: -1, className: "".concat(prefixCls, "-year-btn") }, (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(pickerValue, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context__WEBPACK_IMPORTED_MODULE_5__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_7__["default"], { superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance); }, onChange: onPickerValueChange // Limitation , getStart: function getStart(date) { return generateConfig.setMonth(date, 0); }, getEnd: function getEnd(date) { return generateConfig.setMonth(date, 11); } }, yearNode), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { disabledDate: mergedDisabledDate, titleFormat: locale.fieldMonthFormat, colNum: 3, rowNum: 4, baseDate: baseDate // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js": /*!*******************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PanelBody) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); function PanelBody(props) { var rowNum = props.rowNum, colNum = props.colNum, baseDate = props.baseDate, getCellDate = props.getCellDate, prefixColumn = props.prefixColumn, rowClassName = props.rowClassName, titleFormat = props.titleFormat, getCellText = props.getCellText, getCellClassName = props.getCellClassName, headerCells = props.headerCells, _props$cellSelection = props.cellSelection, cellSelection = _props$cellSelection === void 0 ? true : _props$cellSelection, disabledDate = props.disabledDate; var _usePanelContext = (0,_context__WEBPACK_IMPORTED_MODULE_6__.usePanelContext)(), prefixCls = _usePanelContext.prefixCls, type = _usePanelContext.panelType, now = _usePanelContext.now, contextDisabledDate = _usePanelContext.disabledDate, cellRender = _usePanelContext.cellRender, onHover = _usePanelContext.onHover, hoverValue = _usePanelContext.hoverValue, hoverRangeValue = _usePanelContext.hoverRangeValue, generateConfig = _usePanelContext.generateConfig, values = _usePanelContext.values, locale = _usePanelContext.locale, onSelect = _usePanelContext.onSelect; var mergedDisabledDate = disabledDate || contextDisabledDate; var cellPrefixCls = "".concat(prefixCls, "-cell"); // ============================= Context ============================== var _React$useContext = react__WEBPACK_IMPORTED_MODULE_4__.useContext(_context__WEBPACK_IMPORTED_MODULE_6__.PickerHackContext), onCellDblClick = _React$useContext.onCellDblClick; // ============================== Value =============================== var matchValues = function matchValues(date) { return values.some(function (singleValue) { return singleValue && (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSame)(generateConfig, locale, date, singleValue, type); }); }; // =============================== Body =============================== var rows = []; for (var row = 0; row < rowNum; row += 1) { var rowNode = []; var rowStartDate = void 0; var _loop = function _loop() { var offset = row * colNum + col; var currentDate = getCellDate(baseDate, offset); var disabled = mergedDisabledDate === null || mergedDisabledDate === void 0 ? void 0 : mergedDisabledDate(currentDate, { type: type }); // Row Start Cell if (col === 0) { rowStartDate = currentDate; if (prefixColumn) { rowNode.push(prefixColumn(rowStartDate)); } } // Range var inRange = false; var rangeStart = false; var rangeEnd = false; if (cellSelection && hoverRangeValue) { var _hoverRangeValue = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(hoverRangeValue, 2), hoverStart = _hoverRangeValue[0], hoverEnd = _hoverRangeValue[1]; inRange = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isInRange)(generateConfig, hoverStart, hoverEnd, currentDate); rangeStart = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSame)(generateConfig, locale, currentDate, hoverStart, type); rangeEnd = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSame)(generateConfig, locale, currentDate, hoverEnd, type); } // Title var title = titleFormat ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.formatValue)(currentDate, { locale: locale, format: titleFormat, generateConfig: generateConfig }) : undefined; // Render var inner = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", { className: "".concat(cellPrefixCls, "-inner") }, getCellText(currentDate)); rowNode.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("td", { key: col, title: title, className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(cellPrefixCls, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(cellPrefixCls, "-disabled"), disabled), "".concat(cellPrefixCls, "-hover"), (hoverValue || []).some(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSame)(generateConfig, locale, currentDate, date, type); })), "".concat(cellPrefixCls, "-in-range"), inRange && !rangeStart && !rangeEnd), "".concat(cellPrefixCls, "-range-start"), rangeStart), "".concat(cellPrefixCls, "-range-end"), rangeEnd), "".concat(prefixCls, "-cell-selected"), !hoverRangeValue && // WeekPicker use row instead type !== 'week' && matchValues(currentDate)), getCellClassName(currentDate))), onClick: function onClick() { if (!disabled) { onSelect(currentDate); } }, onDoubleClick: function onDoubleClick() { if (!disabled && onCellDblClick) { onCellDblClick(); } }, onMouseEnter: function onMouseEnter() { if (!disabled) { onHover === null || onHover === void 0 || onHover(currentDate); } }, onMouseLeave: function onMouseLeave() { if (!disabled) { onHover === null || onHover === void 0 || onHover(null); } } }, cellRender ? cellRender(currentDate, { prefixCls: prefixCls, originNode: inner, today: now, type: type, locale: locale }) : inner)); }; for (var col = 0; col < colNum; col += 1) { _loop(); } rows.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("tr", { key: row, className: rowClassName === null || rowClassName === void 0 ? void 0 : rowClassName(rowStartDate) }, rowNode)); } // ============================== Render ============================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("div", { className: "".concat(prefixCls, "-body") }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("table", { className: "".concat(prefixCls, "-content") }, headerCells && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("thead", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("tr", null, headerCells)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement("tbody", null, rows))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js": /*!*********************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); var HIDDEN_STYLE = { visibility: 'hidden' }; function PanelHeader(props) { var offset = props.offset, superOffset = props.superOffset, onChange = props.onChange, getStart = props.getStart, getEnd = props.getEnd, children = props.children; var _usePanelContext = (0,_context__WEBPACK_IMPORTED_MODULE_3__.usePanelContext)(), prefixCls = _usePanelContext.prefixCls, _usePanelContext$prev = _usePanelContext.prevIcon, prevIcon = _usePanelContext$prev === void 0 ? "\u2039" : _usePanelContext$prev, _usePanelContext$next = _usePanelContext.nextIcon, nextIcon = _usePanelContext$next === void 0 ? "\u203A" : _usePanelContext$next, _usePanelContext$supe = _usePanelContext.superPrevIcon, superPrevIcon = _usePanelContext$supe === void 0 ? "\xAB" : _usePanelContext$supe, _usePanelContext$supe2 = _usePanelContext.superNextIcon, superNextIcon = _usePanelContext$supe2 === void 0 ? "\xBB" : _usePanelContext$supe2, minDate = _usePanelContext.minDate, maxDate = _usePanelContext.maxDate, generateConfig = _usePanelContext.generateConfig, locale = _usePanelContext.locale, pickerValue = _usePanelContext.pickerValue, type = _usePanelContext.panelType; var headerPrefixCls = "".concat(prefixCls, "-header"); var _React$useContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext(_context__WEBPACK_IMPORTED_MODULE_3__.PickerHackContext), hidePrev = _React$useContext.hidePrev, hideNext = _React$useContext.hideNext, hideHeader = _React$useContext.hideHeader; // ======================= Limitation ======================= var disabledOffsetPrev = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { if (!minDate || !offset || !getEnd) { return false; } var prevPanelLimitDate = getEnd(offset(-1, pickerValue)); return !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__.isSameOrAfter)(generateConfig, locale, prevPanelLimitDate, minDate, type); }, [minDate, offset, pickerValue, getEnd, generateConfig, locale, type]); var disabledSuperOffsetPrev = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { if (!minDate || !superOffset || !getEnd) { return false; } var prevPanelLimitDate = getEnd(superOffset(-1, pickerValue)); return !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__.isSameOrAfter)(generateConfig, locale, prevPanelLimitDate, minDate, type); }, [minDate, superOffset, pickerValue, getEnd, generateConfig, locale, type]); var disabledOffsetNext = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { if (!maxDate || !offset || !getStart) { return false; } var nextPanelLimitDate = getStart(offset(1, pickerValue)); return !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__.isSameOrAfter)(generateConfig, locale, maxDate, nextPanelLimitDate, type); }, [maxDate, offset, pickerValue, getStart, generateConfig, locale, type]); var disabledSuperOffsetNext = react__WEBPACK_IMPORTED_MODULE_1__.useMemo(function () { if (!maxDate || !superOffset || !getStart) { return false; } var nextPanelLimitDate = getStart(superOffset(1, pickerValue)); return !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_2__.isSameOrAfter)(generateConfig, locale, maxDate, nextPanelLimitDate, type); }, [maxDate, superOffset, pickerValue, getStart, generateConfig, locale, type]); // ========================= Offset ========================= var onOffset = function onOffset(distance) { if (offset) { onChange(offset(distance, pickerValue)); } }; var onSuperOffset = function onSuperOffset(distance) { if (superOffset) { onChange(superOffset(distance, pickerValue)); } }; // ========================= Render ========================= if (hideHeader) { return null; } var prevBtnCls = "".concat(headerPrefixCls, "-prev-btn"); var nextBtnCls = "".concat(headerPrefixCls, "-next-btn"); var superPrevBtnCls = "".concat(headerPrefixCls, "-super-prev-btn"); var superNextBtnCls = "".concat(headerPrefixCls, "-super-next-btn"); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", { className: headerPrefixCls }, superOffset && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("button", { type: "button", "aria-label": locale.previousYear, onClick: function onClick() { return onSuperOffset(-1); }, tabIndex: -1, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(superPrevBtnCls, disabledSuperOffsetPrev && "".concat(superPrevBtnCls, "-disabled")), disabled: disabledSuperOffsetPrev, style: hidePrev ? HIDDEN_STYLE : {} }, superPrevIcon), offset && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("button", { type: "button", "aria-label": locale.previousMonth, onClick: function onClick() { return onOffset(-1); }, tabIndex: -1, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(prevBtnCls, disabledOffsetPrev && "".concat(prevBtnCls, "-disabled")), disabled: disabledOffsetPrev, style: hidePrev ? HIDDEN_STYLE : {} }, prevIcon), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", { className: "".concat(headerPrefixCls, "-view") }, children), offset && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("button", { type: "button", "aria-label": locale.nextMonth, onClick: function onClick() { return onOffset(1); }, tabIndex: -1, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(nextBtnCls, disabledOffsetNext && "".concat(nextBtnCls, "-disabled")), disabled: disabledOffsetNext, style: hideNext ? HIDDEN_STYLE : {} }, nextIcon), superOffset && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("button", { type: "button", "aria-label": locale.nextYear, onClick: function onClick() { return onSuperOffset(1); }, tabIndex: -1, className: classnames__WEBPACK_IMPORTED_MODULE_0___default()(superNextBtnCls, disabledSuperOffsetNext && "".concat(superNextBtnCls, "-disabled")), disabled: disabledSuperOffsetNext, style: hideNext ? HIDDEN_STYLE : {} }, superNextIcon)); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PanelHeader); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js": /*!****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js ***! \****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ QuarterPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function QuarterPanel(props) { var prefixCls = props.prefixCls, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, onPickerValueChange = props.onPickerValueChange, onModeChange = props.onModeChange; var panelPrefixCls = "".concat(prefixCls, "-quarter-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useInfo)(props, 'quarter'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 1), info = _useInfo2[0]; var baseDate = generateConfig.setMonth(pickerValue, 0); // ========================= Cells ========================== var getCellDate = function getCellDate(date, offset) { return generateConfig.addMonth(date, offset * 3); }; var getCellText = function getCellText(date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: locale.cellQuarterFormat, generateConfig: generateConfig }); }; var getCellClassName = function getCellClassName() { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), true); }; // ========================= Header ========================= var yearNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("button", { type: "button", key: "year", "aria-label": locale.yearSelect, onClick: function onClick() { onModeChange('year'); }, tabIndex: -1, className: "".concat(prefixCls, "-year-btn") }, (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(pickerValue, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context__WEBPACK_IMPORTED_MODULE_5__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_7__["default"], { superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance); }, onChange: onPickerValueChange // Limitation , getStart: function getStart(date) { return generateConfig.setMonth(date, 0); }, getEnd: function getEnd(date) { return generateConfig.setMonth(date, 11); } }, yearNode), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { titleFormat: locale.fieldQuarterFormat, colNum: 4, rowNum: 1, baseDate: baseDate // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js": /*!********************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js ***! \********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ TimeColumn) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _useScrollTo__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./useScrollTo */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js"); var SCROLL_DELAY = 300; // Not use JSON.stringify to avoid dead loop function flattenUnits(units) { return units.map(function (_ref) { var value = _ref.value, label = _ref.label, disabled = _ref.disabled; return [value, label, disabled].join(','); }).join(';'); } function TimeColumn(props) { var units = props.units, value = props.value, optionalValue = props.optionalValue, type = props.type, onChange = props.onChange, onHover = props.onHover, onDblClick = props.onDblClick, changeOnScroll = props.changeOnScroll; var _usePanelContext = (0,_context__WEBPACK_IMPORTED_MODULE_6__.usePanelContext)(), prefixCls = _usePanelContext.prefixCls, cellRender = _usePanelContext.cellRender, now = _usePanelContext.now, locale = _usePanelContext.locale; var panelPrefixCls = "".concat(prefixCls, "-time-panel"); var cellPrefixCls = "".concat(prefixCls, "-time-panel-cell"); // ========================== Refs ========================== var ulRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(null); // ========================= Scroll ========================= var checkDelayRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(); var clearDelayCheck = function clearDelayCheck() { clearTimeout(checkDelayRef.current); }; // ========================== Sync ========================== var _useScrollTo = (0,_useScrollTo__WEBPACK_IMPORTED_MODULE_7__["default"])(ulRef, value !== null && value !== void 0 ? value : optionalValue), _useScrollTo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useScrollTo, 3), syncScroll = _useScrollTo2[0], stopScroll = _useScrollTo2[1], isScrolling = _useScrollTo2[2]; // Effect sync value scroll (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["default"])(function () { syncScroll(); clearDelayCheck(); return function () { stopScroll(); clearDelayCheck(); }; }, [value, optionalValue, flattenUnits(units)]); // ========================= Change ========================= // Scroll event if sync onScroll var onInternalScroll = function onInternalScroll(event) { clearDelayCheck(); var target = event.target; if (!isScrolling() && changeOnScroll) { checkDelayRef.current = setTimeout(function () { var ul = ulRef.current; var firstLiTop = ul.querySelector("li").offsetTop; var liList = Array.from(ul.querySelectorAll("li")); var liTopList = liList.map(function (li) { return li.offsetTop - firstLiTop; }); var liDistList = liTopList.map(function (top, index) { if (units[index].disabled) { return Number.MAX_SAFE_INTEGER; } return Math.abs(top - target.scrollTop); }); // Find min distance index var minDist = Math.min.apply(Math, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(liDistList)); var minDistIndex = liDistList.findIndex(function (dist) { return dist === minDist; }); var targetUnit = units[minDistIndex]; if (targetUnit && !targetUnit.disabled) { onChange(targetUnit.value); } }, SCROLL_DELAY); } }; // ========================= Render ========================= var columnPrefixCls = "".concat(panelPrefixCls, "-column"); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("ul", { className: columnPrefixCls, ref: ulRef, "data-type": type, onScroll: onInternalScroll }, units.map(function (_ref2) { var label = _ref2.label, unitValue = _ref2.value, disabled = _ref2.disabled; var inner = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", { className: "".concat(cellPrefixCls, "-inner") }, label); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("li", { key: unitValue, className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(cellPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(cellPrefixCls, "-selected"), value === unitValue), "".concat(cellPrefixCls, "-disabled"), disabled)), onClick: function onClick() { if (!disabled) { onChange(unitValue); } }, onDoubleClick: function onDoubleClick() { if (!disabled && onDblClick) { onDblClick(); } }, onMouseEnter: function onMouseEnter() { onHover(unitValue); }, onMouseLeave: function onMouseLeave() { onHover(null); }, "data-value": unitValue }, cellRender ? cellRender(unitValue, { prefixCls: prefixCls, originNode: inner, today: now, type: 'time', subType: type, locale: locale }) : inner); })); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js": /*!***************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js ***! \***************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ TimePanelBody) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../hooks/useTimeInfo */ "../../../node_modules/rc-picker/es/hooks/useTimeInfo.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _TimeColumn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TimeColumn */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js"); function isAM(hour) { return hour < 12; } function TimePanelBody(props) { var showHour = props.showHour, showMinute = props.showMinute, showSecond = props.showSecond, showMillisecond = props.showMillisecond, showMeridiem = props.use12Hours, changeOnScroll = props.changeOnScroll; var _usePanelContext = (0,_context__WEBPACK_IMPORTED_MODULE_5__.usePanelContext)(), prefixCls = _usePanelContext.prefixCls, values = _usePanelContext.values, generateConfig = _usePanelContext.generateConfig, locale = _usePanelContext.locale, onSelect = _usePanelContext.onSelect, _usePanelContext$onHo = _usePanelContext.onHover, onHover = _usePanelContext$onHo === void 0 ? function () {} : _usePanelContext$onHo, pickerValue = _usePanelContext.pickerValue; var value = (values === null || values === void 0 ? void 0 : values[0]) || null; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context__WEBPACK_IMPORTED_MODULE_5__.PickerHackContext), onCellDblClick = _React$useContext.onCellDblClick; // ========================== Info ========================== var _useTimeInfo = (0,_hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__["default"])(generateConfig, props, value), _useTimeInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useTimeInfo, 5), getValidTime = _useTimeInfo2[0], rowHourUnits = _useTimeInfo2[1], getMinuteUnits = _useTimeInfo2[2], getSecondUnits = _useTimeInfo2[3], getMillisecondUnits = _useTimeInfo2[4]; // ========================= Value ========================== // PickerValue will tell which one to align on the top var getUnitValue = function getUnitValue(func) { var valueUnitVal = value && generateConfig[func](value); var pickerUnitValue = pickerValue && generateConfig[func](pickerValue); return [valueUnitVal, pickerUnitValue]; }; var _getUnitValue = getUnitValue('getHour'), _getUnitValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue, 2), hour = _getUnitValue2[0], pickerHour = _getUnitValue2[1]; var _getUnitValue3 = getUnitValue('getMinute'), _getUnitValue4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue3, 2), minute = _getUnitValue4[0], pickerMinute = _getUnitValue4[1]; var _getUnitValue5 = getUnitValue('getSecond'), _getUnitValue6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue5, 2), second = _getUnitValue6[0], pickerSecond = _getUnitValue6[1]; var _getUnitValue7 = getUnitValue('getMillisecond'), _getUnitValue8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue7, 2), millisecond = _getUnitValue8[0], pickerMillisecond = _getUnitValue8[1]; var meridiem = hour === null ? null : isAM(hour) ? 'am' : 'pm'; // ========================= Column ========================= // Hours var hourUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { if (!showMeridiem) { return rowHourUnits; } return isAM(hour) ? rowHourUnits.filter(function (h) { return isAM(h.value); }) : rowHourUnits.filter(function (h) { return !isAM(h.value); }); }, [hour, rowHourUnits, showMeridiem]); // >>> Pick Fallback var getEnabled = function getEnabled(units, val) { var _enabledUnits$; var enabledUnits = units.filter(function (unit) { return !unit.disabled; }); return val !== null && val !== void 0 ? val : // Fallback to enabled value enabledUnits === null || enabledUnits === void 0 || (_enabledUnits$ = enabledUnits[0]) === null || _enabledUnits$ === void 0 ? void 0 : _enabledUnits$.value; }; // >>> Minutes var validHour = getEnabled(rowHourUnits, hour); var minuteUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return getMinuteUnits(validHour); }, [getMinuteUnits, validHour]); // >>> Seconds var validMinute = getEnabled(minuteUnits, minute); var secondUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return getSecondUnits(validHour, validMinute); }, [getSecondUnits, validHour, validMinute]); // >>> Milliseconds var validSecond = getEnabled(secondUnits, second); var millisecondUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return getMillisecondUnits(validHour, validMinute, validSecond); }, [getMillisecondUnits, validHour, validMinute, validSecond]); var validMillisecond = getEnabled(millisecondUnits, millisecond); // Meridiem var meridiemUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { if (!showMeridiem) { return []; } var base = generateConfig.getNow(); var amDate = generateConfig.setHour(base, 6); var pmDate = generateConfig.setHour(base, 18); var formatMeridiem = function formatMeridiem(date, defaultLabel) { var cellMeridiemFormat = locale.cellMeridiemFormat; return cellMeridiemFormat ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { generateConfig: generateConfig, locale: locale, format: cellMeridiemFormat }) : defaultLabel; }; return [{ label: formatMeridiem(amDate, 'AM'), value: 'am', disabled: rowHourUnits.every(function (h) { return h.disabled || !isAM(h.value); }) }, { label: formatMeridiem(pmDate, 'PM'), value: 'pm', disabled: rowHourUnits.every(function (h) { return h.disabled || isAM(h.value); }) }]; }, [rowHourUnits, showMeridiem, generateConfig, locale]); // ========================= Change ========================= /** * Check if time is validate or will match to validate one */ var triggerChange = function triggerChange(nextDate) { var validateDate = getValidTime(nextDate); onSelect(validateDate); }; // ========================= Column ========================= // Create a template date for the trigger change event var triggerDateTmpl = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { var tmpl = value || pickerValue || generateConfig.getNow(); var isNotNull = function isNotNull(num) { return num !== null && num !== undefined; }; if (isNotNull(hour)) { tmpl = generateConfig.setHour(tmpl, hour); tmpl = generateConfig.setMinute(tmpl, minute); tmpl = generateConfig.setSecond(tmpl, second); tmpl = generateConfig.setMillisecond(tmpl, millisecond); } else if (isNotNull(pickerHour)) { tmpl = generateConfig.setHour(tmpl, pickerHour); tmpl = generateConfig.setMinute(tmpl, pickerMinute); tmpl = generateConfig.setSecond(tmpl, pickerSecond); tmpl = generateConfig.setMillisecond(tmpl, pickerMillisecond); } else if (isNotNull(validHour)) { tmpl = generateConfig.setHour(tmpl, validHour); tmpl = generateConfig.setMinute(tmpl, validMinute); tmpl = generateConfig.setSecond(tmpl, validSecond); tmpl = generateConfig.setMillisecond(tmpl, validMillisecond); } return tmpl; }, [value, pickerValue, hour, minute, second, millisecond, validHour, validMinute, validSecond, validMillisecond, pickerHour, pickerMinute, pickerSecond, pickerMillisecond, generateConfig]); // ===================== Columns Change ===================== var fillColumnValue = function fillColumnValue(val, func) { if (val === null) { return null; } return generateConfig[func](triggerDateTmpl, val); }; var getNextHourTime = function getNextHourTime(val) { return fillColumnValue(val, 'setHour'); }; var getNextMinuteTime = function getNextMinuteTime(val) { return fillColumnValue(val, 'setMinute'); }; var getNextSecondTime = function getNextSecondTime(val) { return fillColumnValue(val, 'setSecond'); }; var getNextMillisecondTime = function getNextMillisecondTime(val) { return fillColumnValue(val, 'setMillisecond'); }; var getMeridiemTime = function getMeridiemTime(val) { if (val === null) { return null; } if (val === 'am' && !isAM(hour)) { return generateConfig.setHour(triggerDateTmpl, hour - 12); } else if (val === 'pm' && isAM(hour)) { return generateConfig.setHour(triggerDateTmpl, hour + 12); } return triggerDateTmpl; }; var onHourChange = function onHourChange(val) { triggerChange(getNextHourTime(val)); }; var onMinuteChange = function onMinuteChange(val) { triggerChange(getNextMinuteTime(val)); }; var onSecondChange = function onSecondChange(val) { triggerChange(getNextSecondTime(val)); }; var onMillisecondChange = function onMillisecondChange(val) { triggerChange(getNextMillisecondTime(val)); }; var onMeridiemChange = function onMeridiemChange(val) { triggerChange(getMeridiemTime(val)); }; // ====================== Column Hover ====================== var onHourHover = function onHourHover(val) { onHover(getNextHourTime(val)); }; var onMinuteHover = function onMinuteHover(val) { onHover(getNextMinuteTime(val)); }; var onSecondHover = function onSecondHover(val) { onHover(getNextSecondTime(val)); }; var onMillisecondHover = function onMillisecondHover(val) { onHover(getNextMillisecondTime(val)); }; var onMeridiemHover = function onMeridiemHover(val) { onHover(getMeridiemTime(val)); }; // ========================= Render ========================= var sharedColumnProps = { onDblClick: onCellDblClick, changeOnScroll: changeOnScroll }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: "".concat(prefixCls, "-content") }, showHour && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: hourUnits, value: hour, optionalValue: pickerHour, type: "hour", onChange: onHourChange, onHover: onHourHover }, sharedColumnProps)), showMinute && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: minuteUnits, value: minute, optionalValue: pickerMinute, type: "minute", onChange: onMinuteChange, onHover: onMinuteHover }, sharedColumnProps)), showSecond && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: secondUnits, value: second, optionalValue: pickerSecond, type: "second", onChange: onSecondChange, onHover: onSecondHover }, sharedColumnProps)), showMillisecond && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: millisecondUnits, value: millisecond, optionalValue: pickerMillisecond, type: "millisecond", onChange: onMillisecondChange, onHover: onMillisecondHover }, sharedColumnProps)), showMeridiem && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: meridiemUnits, value: meridiem, type: "meridiem", onChange: onMeridiemChange, onHover: onMeridiemHover }, sharedColumnProps))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js": /*!*********************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js ***! \*********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useScrollTo) /* harmony export */ }); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var rc_util_es_Dom_isVisible__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/isVisible */ "../../../node_modules/rc-util/es/Dom/isVisible.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); var SPEED_PTG = 1 / 3; function useScrollTo(ulRef, value) { // ========================= Scroll ========================= var scrollingRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false); var scrollRafRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(null); var scrollDistRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(null); var isScrolling = function isScrolling() { return scrollingRef.current; }; var stopScroll = function stopScroll() { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"].cancel(scrollRafRef.current); scrollingRef.current = false; }; var scrollRafTimesRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(); var startScroll = function startScroll() { var ul = ulRef.current; scrollDistRef.current = null; scrollRafTimesRef.current = 0; if (ul) { var targetLi = ul.querySelector("[data-value=\"".concat(value, "\"]")); var firstLi = ul.querySelector("li"); var doScroll = function doScroll() { stopScroll(); scrollingRef.current = true; scrollRafTimesRef.current += 1; var currentTop = ul.scrollTop; var firstLiTop = firstLi.offsetTop; var targetLiTop = targetLi.offsetTop; var targetTop = targetLiTop - firstLiTop; // Wait for element exist. 5 frames is enough if (targetLiTop === 0 && targetLi !== firstLi || !(0,rc_util_es_Dom_isVisible__WEBPACK_IMPORTED_MODULE_2__["default"])(ul)) { if (scrollRafTimesRef.current <= 5) { scrollRafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(doScroll); } return; } var nextTop = currentTop + (targetTop - currentTop) * SPEED_PTG; var dist = Math.abs(targetTop - nextTop); // Break if dist get larger, which means user is scrolling if (scrollDistRef.current !== null && scrollDistRef.current < dist) { stopScroll(); return; } scrollDistRef.current = dist; // Stop when dist is less than 1 if (dist <= 1) { ul.scrollTop = targetTop; stopScroll(); return; } // IE not support `scrollTo` ul.scrollTop = nextTop; scrollRafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(doScroll); }; if (targetLi && firstLi) { doScroll(); } } }; // ======================== Trigger ========================= var syncScroll = (0,rc_util__WEBPACK_IMPORTED_MODULE_0__.useEvent)(startScroll); return [syncScroll, stopScroll, isScrolling]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js": /*!**************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ findValidateTime: () => (/* binding */ findValidateTime) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); function findValidateTime(date, getHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits, generateConfig) { var nextDate = date; function alignValidate(getUnitValue, setUnitValue, units) { var nextValue = generateConfig[getUnitValue](nextDate); var nextUnit = units.find(function (unit) { return unit.value === nextValue; }); if (!nextUnit || nextUnit.disabled) { // Find most closest unit var validateUnits = units.filter(function (unit) { return !unit.disabled; }); var reverseEnabledUnits = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(validateUnits).reverse(); var validateUnit = reverseEnabledUnits.find(function (unit) { return unit.value <= nextValue; }) || validateUnits[0]; if (validateUnit) { nextValue = validateUnit.value; nextDate = generateConfig[setUnitValue](nextDate, nextValue); } } return nextValue; } // Find validate hour var nextHour = alignValidate('getHour', 'setHour', getHourUnits()); // Find validate minute var nextMinute = alignValidate('getMinute', 'setMinute', getMinuteUnits(nextHour)); // Find validate second var nextSecond = alignValidate('getSecond', 'setSecond', getSecondUnits(nextHour, nextMinute)); // Find validate millisecond alignValidate('getMillisecond', 'setMillisecond', getMillisecondUnits(nextHour, nextMinute, nextSecond)); return nextDate; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ TimePanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); /* harmony import */ var _TimePanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TimePanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js"); function TimePanel(props) { var prefixCls = props.prefixCls, value = props.value, locale = props.locale, generateConfig = props.generateConfig, showTime = props.showTime; var _ref = showTime || {}, format = _ref.format; var panelPrefixCls = "".concat(prefixCls, "-time-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_4__.useInfo)(props, 'time'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useInfo, 1), info = _useInfo2[0]; // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_context__WEBPACK_IMPORTED_MODULE_4__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(panelPrefixCls) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_5__["default"], null, value ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_3__.formatValue)(value, { locale: locale, format: format, generateConfig: generateConfig }) : "\xA0"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimePanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], showTime))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ WeekPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _DatePanel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../DatePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js"); function WeekPanel(props) { var prefixCls = props.prefixCls, generateConfig = props.generateConfig, locale = props.locale, value = props.value, hoverValue = props.hoverValue, hoverRangeValue = props.hoverRangeValue; // =============================== Row ================================ var localeName = locale.locale; var rowPrefixCls = "".concat(prefixCls, "-week-panel-row"); var rowClassName = function rowClassName(currentDate) { var rangeCls = {}; if (hoverRangeValue) { var _hoverRangeValue = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(hoverRangeValue, 2), rangeStart = _hoverRangeValue[0], rangeEnd = _hoverRangeValue[1]; var isRangeStart = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, rangeStart, currentDate); var isRangeEnd = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, rangeEnd, currentDate); rangeCls["".concat(rowPrefixCls, "-range-start")] = isRangeStart; rangeCls["".concat(rowPrefixCls, "-range-end")] = isRangeEnd; rangeCls["".concat(rowPrefixCls, "-range-hover")] = !isRangeStart && !isRangeEnd && (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isInRange)(generateConfig, rangeStart, rangeEnd, currentDate); } if (hoverValue) { rangeCls["".concat(rowPrefixCls, "-hover")] = hoverValue.some(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, currentDate, date); }); } return classnames__WEBPACK_IMPORTED_MODULE_3___default()(rowPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(rowPrefixCls, "-selected"), !hoverRangeValue && (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, value, currentDate)), // Patch for hover range rangeCls); }; // ============================== Render ============================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_DatePanel__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { mode: "week", panelName: "week", rowClassName: rowClassName })); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/YearPanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/YearPanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ YearPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function YearPanel(props) { var prefixCls = props.prefixCls, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, disabledDate = props.disabledDate, onPickerValueChange = props.onPickerValueChange, onModeChange = props.onModeChange; var panelPrefixCls = "".concat(prefixCls, "-year-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useInfo)(props, 'year'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 1), info = _useInfo2[0]; var getStartYear = function getStartYear(date) { var startYear = Math.floor(generateConfig.getYear(date) / 10) * 10; return generateConfig.setYear(date, startYear); }; var getEndYear = function getEndYear(date) { var startYear = getStartYear(date); return generateConfig.addYear(startYear, 9); }; var startYearDate = getStartYear(pickerValue); var endYearDate = getEndYear(pickerValue); var baseDate = generateConfig.addYear(startYearDate, -1); // ========================= Cells ========================== var getCellDate = function getCellDate(date, offset) { return generateConfig.addYear(date, offset); }; var getCellText = function getCellText(date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: locale.cellYearFormat, generateConfig: generateConfig }); }; var getCellClassName = function getCellClassName(date) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSameYear)(generateConfig, date, startYearDate) || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSameYear)(generateConfig, date, endYearDate) || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isInRange)(generateConfig, startYearDate, endYearDate, date)); }; // ======================== Disabled ======================== var mergedDisabledDate = disabledDate ? function (currentDate, disabledInfo) { // Start var startMonth = generateConfig.setMonth(currentDate, 0); var startDate = generateConfig.setDate(startMonth, 1); // End var endMonth = generateConfig.addYear(startDate, 1); var endDate = generateConfig.addDate(endMonth, -1); return disabledDate(startDate, disabledInfo) && disabledDate(endDate, disabledInfo); } : null; // ========================= Header ========================= var yearNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("button", { type: "button", key: "decade", "aria-label": locale.decadeSelect, onClick: function onClick() { onModeChange('decade'); }, tabIndex: -1, className: "".concat(prefixCls, "-decade-btn") }, (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(startYearDate, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig }), "-", (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(endYearDate, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context__WEBPACK_IMPORTED_MODULE_5__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_7__["default"], { superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance * 10); }, onChange: onPickerValueChange // Limitation , getStart: getStartYear, getEnd: getEndYear }, yearNode), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { disabledDate: mergedDisabledDate, titleFormat: locale.fieldYearFormat, colNum: 3, rowNum: 4, baseDate: baseDate // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/context.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/context.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PanelContext: () => (/* binding */ PanelContext), /* harmony export */ PickerHackContext: () => (/* binding */ PickerHackContext), /* harmony export */ useInfo: () => (/* binding */ useInfo), /* harmony export */ usePanelContext: () => (/* binding */ usePanelContext) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /** Used for each single Panel. e.g. DatePanel */ var PanelContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); function usePanelContext() { return react__WEBPACK_IMPORTED_MODULE_0__.useContext(PanelContext); } /** * Get shared props for the SharedPanelProps interface. */ function useInfo(props, panelType) { var prefixCls = props.prefixCls, generateConfig = props.generateConfig, locale = props.locale, disabledDate = props.disabledDate, minDate = props.minDate, maxDate = props.maxDate, cellRender = props.cellRender, hoverValue = props.hoverValue, hoverRangeValue = props.hoverRangeValue, onHover = props.onHover, values = props.values, pickerValue = props.pickerValue, onSelect = props.onSelect, prevIcon = props.prevIcon, nextIcon = props.nextIcon, superPrevIcon = props.superPrevIcon, superNextIcon = props.superNextIcon; // ========================= MISC ========================= var now = generateConfig.getNow(); // ========================= Info ========================= var info = { now: now, values: values, pickerValue: pickerValue, prefixCls: prefixCls, disabledDate: disabledDate, minDate: minDate, maxDate: maxDate, cellRender: cellRender, hoverValue: hoverValue, hoverRangeValue: hoverRangeValue, onHover: onHover, locale: locale, generateConfig: generateConfig, onSelect: onSelect, panelType: panelType, // Icons prevIcon: prevIcon, nextIcon: nextIcon, superPrevIcon: superPrevIcon, superNextIcon: superNextIcon }; return [info, now]; } // ============================== Internal ============================== /** * Internal usage for RangePicker to not to show the operation arrow */ var PickerHackContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({}); if (true) { PickerHackContext.displayName = 'PickerHackContext'; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/index.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/index.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _hooks_useLocale__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../hooks/useLocale */ "../../../node_modules/rc-picker/es/hooks/useLocale.js"); /* harmony import */ var _hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../hooks/useTimeConfig */ "../../../node_modules/rc-picker/es/hooks/useTimeConfig.js"); /* harmony import */ var _hooks_useToggleDates__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../hooks/useToggleDates */ "../../../node_modules/rc-picker/es/hooks/useToggleDates.js"); /* harmony import */ var _PickerInput_context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../PickerInput/context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _PickerInput_hooks_useCellRender__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../PickerInput/hooks/useCellRender */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _DatePanel__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./DatePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js"); /* harmony import */ var _DateTimePanel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./DateTimePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DateTimePanel/index.js"); /* harmony import */ var _DecadePanel__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./DecadePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DecadePanel/index.js"); /* harmony import */ var _MonthPanel__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MonthPanel */ "../../../node_modules/rc-picker/es/PickerPanel/MonthPanel/index.js"); /* harmony import */ var _QuarterPanel__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./QuarterPanel */ "../../../node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js"); /* harmony import */ var _TimePanel__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./TimePanel */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js"); /* harmony import */ var _WeekPanel__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./WeekPanel */ "../../../node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js"); /* harmony import */ var _YearPanel__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./YearPanel */ "../../../node_modules/rc-picker/es/PickerPanel/YearPanel/index.js"); var DefaultComponents = { date: _DatePanel__WEBPACK_IMPORTED_MODULE_16__["default"], datetime: _DateTimePanel__WEBPACK_IMPORTED_MODULE_17__["default"], week: _WeekPanel__WEBPACK_IMPORTED_MODULE_22__["default"], month: _MonthPanel__WEBPACK_IMPORTED_MODULE_19__["default"], quarter: _QuarterPanel__WEBPACK_IMPORTED_MODULE_20__["default"], year: _YearPanel__WEBPACK_IMPORTED_MODULE_23__["default"], decade: _DecadePanel__WEBPACK_IMPORTED_MODULE_18__["default"], time: _TimePanel__WEBPACK_IMPORTED_MODULE_21__["default"] }; function PickerPanel(props, ref) { var _React$useContext; var locale = props.locale, generateConfig = props.generateConfig, direction = props.direction, prefixCls = props.prefixCls, _props$tabIndex = props.tabIndex, tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex, multiple = props.multiple, defaultValue = props.defaultValue, value = props.value, onChange = props.onChange, onSelect = props.onSelect, defaultPickerValue = props.defaultPickerValue, pickerValue = props.pickerValue, onPickerValueChange = props.onPickerValueChange, mode = props.mode, onPanelChange = props.onPanelChange, _props$picker = props.picker, picker = _props$picker === void 0 ? 'date' : _props$picker, showTime = props.showTime, hoverValue = props.hoverValue, hoverRangeValue = props.hoverRangeValue, cellRender = props.cellRender, dateRender = props.dateRender, monthCellRender = props.monthCellRender, _props$components = props.components, components = _props$components === void 0 ? {} : _props$components, hideHeader = props.hideHeader; var mergedPrefixCls = ((_React$useContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_PickerInput_context__WEBPACK_IMPORTED_MODULE_11__["default"])) === null || _React$useContext === void 0 ? void 0 : _React$useContext.prefixCls) || prefixCls || 'rc-picker'; // ========================== Refs ========================== var rootRef = react__WEBPACK_IMPORTED_MODULE_7__.useRef(); react__WEBPACK_IMPORTED_MODULE_7__.useImperativeHandle(ref, function () { return { nativeElement: rootRef.current }; }); // ========================== Time ========================== // Auto `format` need to check `showTime.showXXX` first. // And then merge the `locale` into `mergedShowTime`. var _getTimeProps = (0,_hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_9__.getTimeProps)(props), _getTimeProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_getTimeProps, 4), timeProps = _getTimeProps2[0], localeTimeProps = _getTimeProps2[1], showTimeFormat = _getTimeProps2[2], propFormat = _getTimeProps2[3]; // ========================= Locale ========================= var filledLocale = (0,_hooks_useLocale__WEBPACK_IMPORTED_MODULE_8__["default"])(locale, localeTimeProps); // ========================= Picker ========================= var internalPicker = picker === 'date' && showTime ? 'datetime' : picker; // ======================== ShowTime ======================== var mergedShowTime = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { return (0,_hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_9__.fillShowTimeConfig)(internalPicker, showTimeFormat, propFormat, timeProps, filledLocale); }, [internalPicker, showTimeFormat, propFormat, timeProps, filledLocale]); // ========================== Now =========================== var now = generateConfig.getNow(); // ========================== Mode ========================== var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useMergedState)(picker, { value: mode, postState: function postState(val) { return val || 'date'; } }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2), mergedMode = _useMergedState2[0], setMergedMode = _useMergedState2[1]; var internalMode = mergedMode === 'date' && mergedShowTime ? 'datetime' : mergedMode; // ========================= Toggle ========================= var toggleDates = (0,_hooks_useToggleDates__WEBPACK_IMPORTED_MODULE_10__["default"])(generateConfig, locale, internalPicker); // ========================= Value ========================== // >>> Real value // Interactive with `onChange` event which only trigger when the `mode` is `picker` var _useMergedState3 = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useMergedState)(defaultValue, { value: value }), _useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState3, 2), innerValue = _useMergedState4[0], setMergedValue = _useMergedState4[1]; var mergedValue = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { // Clean up `[null]` var values = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_14__.toArray)(innerValue).filter(function (val) { return val; }); return multiple ? values : values.slice(0, 1); }, [innerValue, multiple]); // Sync value and only trigger onChange event when changed var triggerChange = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useEvent)(function (nextValue) { setMergedValue(nextValue); if (onChange && (nextValue === null || mergedValue.length !== nextValue.length || mergedValue.some(function (ori, index) { return !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_13__.isSame)(generateConfig, locale, ori, nextValue[index], internalPicker); }))) { onChange === null || onChange === void 0 || onChange(multiple ? nextValue : nextValue[0]); } }); // >>> CalendarValue // CalendarValue is a temp value for user operation // which will only trigger `onCalendarChange` but not `onChange` var onInternalSelect = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useEvent)(function (newDate) { onSelect === null || onSelect === void 0 || onSelect(newDate); if (mergedMode === picker) { var nextValues = multiple ? toggleDates(mergedValue, newDate) : [newDate]; triggerChange(nextValues); } }); // >>> PickerValue // PickerValue is used to control the current displaying panel var _useMergedState5 = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useMergedState)(defaultPickerValue || mergedValue[0] || now, { value: pickerValue }), _useMergedState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState5, 2), mergedPickerValue = _useMergedState6[0], setInternalPickerValue = _useMergedState6[1]; react__WEBPACK_IMPORTED_MODULE_7__.useEffect(function () { if (mergedValue[0] && !pickerValue) { setInternalPickerValue(mergedValue[0]); } }, [mergedValue[0]]); // Both trigger when manually pickerValue or mode change var triggerPanelChange = function triggerPanelChange(viewDate, nextMode) { onPanelChange === null || onPanelChange === void 0 || onPanelChange(viewDate || pickerValue, nextMode || mergedMode); }; var setPickerValue = function setPickerValue(nextPickerValue) { var triggerPanelEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; setInternalPickerValue(nextPickerValue); onPickerValueChange === null || onPickerValueChange === void 0 || onPickerValueChange(nextPickerValue); if (triggerPanelEvent) { triggerPanelChange(nextPickerValue); } }; var triggerModeChange = function triggerModeChange(nextMode, viewDate) { setMergedMode(nextMode); if (viewDate) { setPickerValue(viewDate); } triggerPanelChange(viewDate, nextMode); }; var onPanelValueSelect = function onPanelValueSelect(nextValue) { onInternalSelect(nextValue); setPickerValue(nextValue); // Update mode if needed if (mergedMode !== picker) { var decadeYearQueue = ['decade', 'year']; var decadeYearMonthQueue = [].concat(decadeYearQueue, ['month']); var pickerQueue = { quarter: [].concat(decadeYearQueue, ['quarter']), week: [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(decadeYearMonthQueue), ['week']), date: [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(decadeYearMonthQueue), ['date']) }; var queue = pickerQueue[picker] || decadeYearMonthQueue; var index = queue.indexOf(mergedMode); var nextMode = queue[index + 1]; if (nextMode) { triggerModeChange(nextMode, nextValue); } } }; // ======================= Hover Date ======================= var hoverRangeDate = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { var start; var end; if (Array.isArray(hoverRangeValue)) { var _hoverRangeValue = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(hoverRangeValue, 2); start = _hoverRangeValue[0]; end = _hoverRangeValue[1]; } else { start = hoverRangeValue; } // Return for not exist if (!start && !end) { return null; } // Fill if has empty start = start || end; end = end || start; return generateConfig.isAfter(start, end) ? [end, start] : [start, end]; }, [hoverRangeValue, generateConfig]); // ======================= Components ======================= // >>> cellRender var onInternalCellRender = (0,_PickerInput_hooks_useCellRender__WEBPACK_IMPORTED_MODULE_12__["default"])(cellRender, dateRender, monthCellRender); // ======================= Components ======================= var PanelComponent = components[internalMode] || DefaultComponents[internalMode] || _DatePanel__WEBPACK_IMPORTED_MODULE_16__["default"]; // ======================== Context ========================= var parentHackContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_context__WEBPACK_IMPORTED_MODULE_15__.PickerHackContext); var pickerPanelContext = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, parentHackContext), {}, { hideHeader: hideHeader }); }, [parentHackContext, hideHeader]); // ======================== Warnings ======================== if (true) { (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.warning)(!mergedValue || mergedValue.every(function (val) { return generateConfig.isValidate(val); }), 'Invalidate date pass to `value` or `defaultValue`.'); } // ========================= Render ========================= var panelCls = "".concat(mergedPrefixCls, "-panel"); var panelProps = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_14__.pickProps)(props, [ // Week 'showWeek', // Icons 'prevIcon', 'nextIcon', 'superPrevIcon', 'superNextIcon', // Disabled 'disabledDate', 'minDate', 'maxDate', // Hover 'onHover']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(_context__WEBPACK_IMPORTED_MODULE_15__.PickerHackContext.Provider, { value: pickerPanelContext }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement("div", { ref: rootRef, tabIndex: tabIndex, className: classnames__WEBPACK_IMPORTED_MODULE_5___default()(panelCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(panelCls, "-rtl"), direction === 'rtl')) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(PanelComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, panelProps, { // Time showTime: mergedShowTime // MISC , prefixCls: mergedPrefixCls, locale: filledLocale, generateConfig: generateConfig // Mode , onModeChange: triggerModeChange // Value , pickerValue: mergedPickerValue, onPickerValueChange: function onPickerValueChange(nextPickerValue) { setPickerValue(nextPickerValue, true); }, value: mergedValue[0], onSelect: onPanelValueSelect, values: mergedValue // Render , cellRender: onInternalCellRender // Hover , hoverRangeValue: hoverRangeDate, hoverValue: hoverValue })))); } var RefPanelPicker = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.forwardRef(PickerPanel)); if (true) { RefPanelPicker.displayName = 'PanelPicker'; } // Make support generic /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefPanelPicker); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerTrigger/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerTrigger/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_uiUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/uiUtil */ "../../../node_modules/rc-picker/es/utils/uiUtil.js"); /* harmony import */ var _PickerInput_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../PickerInput/context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); var BUILT_IN_PLACEMENTS = { bottomLeft: { points: ['tl', 'bl'], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, bottomRight: { points: ['tr', 'br'], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, topLeft: { points: ['bl', 'tl'], offset: [0, -4], overflow: { adjustX: 0, adjustY: 1 } }, topRight: { points: ['br', 'tr'], offset: [0, -4], overflow: { adjustX: 0, adjustY: 1 } } }; function PickerTrigger(_ref) { var popupElement = _ref.popupElement, popupStyle = _ref.popupStyle, popupClassName = _ref.popupClassName, popupAlign = _ref.popupAlign, transitionName = _ref.transitionName, getPopupContainer = _ref.getPopupContainer, children = _ref.children, range = _ref.range, placement = _ref.placement, _ref$builtinPlacement = _ref.builtinPlacements, builtinPlacements = _ref$builtinPlacement === void 0 ? BUILT_IN_PLACEMENTS : _ref$builtinPlacement, direction = _ref.direction, visible = _ref.visible, onClose = _ref.onClose; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_PickerInput_context__WEBPACK_IMPORTED_MODULE_5__["default"]), prefixCls = _React$useContext.prefixCls; var dropdownPrefixCls = "".concat(prefixCls, "-dropdown"); var realPlacement = (0,_utils_uiUtil__WEBPACK_IMPORTED_MODULE_4__.getRealPlacement)(placement, direction === 'rtl'); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_1__["default"], { showAction: [], hideAction: ['click'], popupPlacement: realPlacement, builtinPlacements: builtinPlacements, prefixCls: dropdownPrefixCls, popupTransitionName: transitionName, popup: popupElement, popupAlign: popupAlign, popupVisible: visible, popupClassName: classnames__WEBPACK_IMPORTED_MODULE_2___default()(popupClassName, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(dropdownPrefixCls, "-range"), range), "".concat(dropdownPrefixCls, "-rtl"), direction === 'rtl')), popupStyle: popupStyle, stretch: "minWidth", getPopupContainer: getPopupContainer, onPopupVisibleChange: function onPopupVisibleChange(nextVisible) { if (!nextVisible) { onClose(); } } }, children); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PickerTrigger); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerTrigger/util.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerTrigger/util.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ pickTriggerProps: () => (/* binding */ pickTriggerProps) /* harmony export */ }); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); function pickTriggerProps(props) { return (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_0__.pickProps)(props, ['placement', 'builtinPlacements', 'popupAlign', 'getPopupContainer', 'transitionName', 'direction']); } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useLocale.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useLocale.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useLocale), /* harmony export */ fillTimeFormat: () => (/* binding */ fillTimeFormat) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); function fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, showMeridiem) { var timeFormat = ''; // Base HH:mm:ss var cells = []; if (showHour) { cells.push(showMeridiem ? 'hh' : 'HH'); } if (showMinute) { cells.push('mm'); } if (showSecond) { cells.push('ss'); } timeFormat = cells.join(':'); // Millisecond if (showMillisecond) { timeFormat += '.SSS'; } // Meridiem if (showMeridiem) { timeFormat += ' A'; } return timeFormat; } /** * Used for `useFilledProps` since it already in the React.useMemo */ function fillLocale(locale, showHour, showMinute, showSecond, showMillisecond, use12Hours) { // Not fill `monthFormat` since `locale.shortMonths` handle this // Not fill `cellMeridiemFormat` since AM & PM by default var fieldDateTimeFormat = locale.fieldDateTimeFormat, fieldDateFormat = locale.fieldDateFormat, fieldTimeFormat = locale.fieldTimeFormat, fieldMonthFormat = locale.fieldMonthFormat, fieldYearFormat = locale.fieldYearFormat, fieldWeekFormat = locale.fieldWeekFormat, fieldQuarterFormat = locale.fieldQuarterFormat, yearFormat = locale.yearFormat, cellYearFormat = locale.cellYearFormat, cellQuarterFormat = locale.cellQuarterFormat, dayFormat = locale.dayFormat, cellDateFormat = locale.cellDateFormat; var timeFormat = fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, use12Hours); return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, locale), {}, { fieldDateTimeFormat: fieldDateTimeFormat || "YYYY-MM-DD ".concat(timeFormat), fieldDateFormat: fieldDateFormat || 'YYYY-MM-DD', fieldTimeFormat: fieldTimeFormat || timeFormat, fieldMonthFormat: fieldMonthFormat || 'YYYY-MM', fieldYearFormat: fieldYearFormat || 'YYYY', fieldWeekFormat: fieldWeekFormat || 'gggg-wo', fieldQuarterFormat: fieldQuarterFormat || 'YYYY-[Q]Q', yearFormat: yearFormat || 'YYYY', cellYearFormat: cellYearFormat || 'YYYY', cellQuarterFormat: cellQuarterFormat || '[Q]Q', cellDateFormat: cellDateFormat || dayFormat || 'D' }); } /** * Fill locale format as start up */ function useLocale(locale, showProps) { var showHour = showProps.showHour, showMinute = showProps.showMinute, showSecond = showProps.showSecond, showMillisecond = showProps.showMillisecond, use12Hours = showProps.use12Hours; return react__WEBPACK_IMPORTED_MODULE_1___default().useMemo(function () { return fillLocale(locale, showHour, showMinute, showSecond, showMillisecond, use12Hours); }, [locale, showHour, showMinute, showSecond, showMillisecond, use12Hours]); } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useSyncState.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useSyncState.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useSyncState) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /** * Sync value with state. * This should only used for internal which not affect outside calculation. * Since it's not safe for suspense. */ function useSyncState(defaultValue, controlledValue) { var valueRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(defaultValue); var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState({}), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2), forceUpdate = _React$useState2[1]; var getter = function getter(useControlledValueFirst) { return useControlledValueFirst && controlledValue !== undefined ? controlledValue : valueRef.current; }; var setter = function setter(nextValue) { valueRef.current = nextValue; forceUpdate({}); }; return [getter, setter, getter(true)]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useTimeConfig.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useTimeConfig.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ fillShowTimeConfig: () => (/* binding */ fillShowTimeConfig), /* harmony export */ getTimeProps: () => (/* binding */ getTimeProps) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _useLocale__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useLocale */ "../../../node_modules/rc-picker/es/hooks/useLocale.js"); function checkShow(format, keywords, show) { return show !== null && show !== void 0 ? show : keywords.some(function (keyword) { return format.includes(keyword); }); } var showTimeKeys = [ // 'format', 'showNow', 'showHour', 'showMinute', 'showSecond', 'showMillisecond', 'use12Hours', 'hourStep', 'minuteStep', 'secondStep', 'millisecondStep', 'hideDisabledOptions', 'defaultValue', 'disabledHours', 'disabledMinutes', 'disabledSeconds', 'disabledMilliseconds', 'disabledTime', 'changeOnScroll', 'defaultOpenValue']; /** * Get SharedTimeProps from props. */ function pickTimeProps(props) { var timeProps = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.pickProps)(props, showTimeKeys); var format = props.format, picker = props.picker; var propFormat = null; if (format) { propFormat = format; if (Array.isArray(propFormat)) { propFormat = propFormat[0]; } propFormat = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(propFormat) === 'object' ? propFormat.format : propFormat; } if (picker === 'time') { timeProps.format = propFormat; } return [timeProps, propFormat]; } function isStringFormat(format) { return format && typeof format === 'string'; } /** Check if all the showXXX is `undefined` */ function existShowConfig(showHour, showMinute, showSecond, showMillisecond) { return [showHour, showMinute, showSecond, showMillisecond].some(function (show) { return show !== undefined; }); } /** Fill the showXXX if needed */ function fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond) { var parsedShowHour = showHour; var parsedShowMinute = showMinute; var parsedShowSecond = showSecond; if (!hasShowConfig && !parsedShowHour && !parsedShowMinute && !parsedShowSecond && !showMillisecond) { parsedShowHour = true; parsedShowMinute = true; parsedShowSecond = true; } else if (hasShowConfig) { var _parsedShowHour, _parsedShowMinute, _parsedShowSecond; var existFalse = [parsedShowHour, parsedShowMinute, parsedShowSecond].some(function (show) { return show === false; }); var existTrue = [parsedShowHour, parsedShowMinute, parsedShowSecond].some(function (show) { return show === true; }); var defaultShow = existFalse ? true : !existTrue; parsedShowHour = (_parsedShowHour = parsedShowHour) !== null && _parsedShowHour !== void 0 ? _parsedShowHour : defaultShow; parsedShowMinute = (_parsedShowMinute = parsedShowMinute) !== null && _parsedShowMinute !== void 0 ? _parsedShowMinute : defaultShow; parsedShowSecond = (_parsedShowSecond = parsedShowSecond) !== null && _parsedShowSecond !== void 0 ? _parsedShowSecond : defaultShow; } return [parsedShowHour, parsedShowMinute, parsedShowSecond, showMillisecond]; } /** * Get `showHour`, `showMinute`, `showSecond` or other from the props. * This is pure function, will not get `showXXX` from the `format` prop. */ function getTimeProps(componentProps) { var showTime = componentProps.showTime; var _pickTimeProps = pickTimeProps(componentProps), _pickTimeProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_pickTimeProps, 2), pickedProps = _pickTimeProps2[0], propFormat = _pickTimeProps2[1]; var showTimeConfig = showTime && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(showTime) === 'object' ? showTime : {}; var timeConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ defaultOpenValue: showTimeConfig.defaultOpenValue || showTimeConfig.defaultValue }, pickedProps), showTimeConfig); var showMillisecond = timeConfig.showMillisecond; var showHour = timeConfig.showHour, showMinute = timeConfig.showMinute, showSecond = timeConfig.showSecond; var hasShowConfig = existShowConfig(showHour, showMinute, showSecond, showMillisecond); var _fillShowConfig = fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond); var _fillShowConfig2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_fillShowConfig, 3); showHour = _fillShowConfig2[0]; showMinute = _fillShowConfig2[1]; showSecond = _fillShowConfig2[2]; return [timeConfig, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, timeConfig), {}, { showHour: showHour, showMinute: showMinute, showSecond: showSecond, showMillisecond: showMillisecond }), timeConfig.format, propFormat]; } function fillShowTimeConfig(picker, showTimeFormat, propFormat, timeConfig, locale) { var isTimePicker = picker === 'time'; if (picker === 'datetime' || isTimePicker) { var pickedProps = timeConfig; // ====================== BaseFormat ====================== var defaultLocaleFormat = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.getRowFormat)(picker, locale, null); var baselineFormat = defaultLocaleFormat; var formatList = [showTimeFormat, propFormat]; for (var i = 0; i < formatList.length; i += 1) { var format = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.toArray)(formatList[i])[0]; if (isStringFormat(format)) { baselineFormat = format; break; } } // ========================= Show ========================= var showHour = pickedProps.showHour, showMinute = pickedProps.showMinute, showSecond = pickedProps.showSecond, showMillisecond = pickedProps.showMillisecond; var use12Hours = pickedProps.use12Hours; var showMeridiem = checkShow(baselineFormat, ['a', 'A', 'LT', 'LLL', 'LTS'], use12Hours); var hasShowConfig = existShowConfig(showHour, showMinute, showSecond, showMillisecond); // Fill with format, if needed if (!hasShowConfig) { showHour = checkShow(baselineFormat, ['H', 'h', 'k', 'LT', 'LLL']); showMinute = checkShow(baselineFormat, ['m', 'LT', 'LLL']); showSecond = checkShow(baselineFormat, ['s', 'LTS']); showMillisecond = checkShow(baselineFormat, ['SSS']); } // Fallback if all can not see // ======================== Format ======================== var _fillShowConfig3 = fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond); var _fillShowConfig4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_fillShowConfig3, 3); showHour = _fillShowConfig4[0]; showMinute = _fillShowConfig4[1]; showSecond = _fillShowConfig4[2]; var timeFormat = showTimeFormat || (0,_useLocale__WEBPACK_IMPORTED_MODULE_4__.fillTimeFormat)(showHour, showMinute, showSecond, showMillisecond, showMeridiem); // ======================== Props ========================= return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, pickedProps), {}, { // Format format: timeFormat, // Show Config showHour: showHour, showMinute: showMinute, showSecond: showSecond, showMillisecond: showMillisecond, use12Hours: showMeridiem }); } return null; } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useTimeInfo.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useTimeInfo.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useTimeInfo) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _PickerPanel_TimePanel_TimePanelBody_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../PickerPanel/TimePanel/TimePanelBody/util */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); function emptyDisabled() { return []; } function generateUnits(start, end) { var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; var hideDisabledOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var disabledUnits = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; var pad = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 2; var units = []; var integerStep = step >= 1 ? step | 0 : 1; for (var i = start; i <= end; i += integerStep) { var disabled = disabledUnits.includes(i); if (!disabled || !hideDisabledOptions) { units.push({ label: (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_5__.leftPad)(i, pad), value: i, disabled: disabled }); } } return units; } /** * Parse time props to get util info */ function useTimeInfo(generateConfig) { var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var date = arguments.length > 2 ? arguments[2] : undefined; var _ref = props || {}, use12Hours = _ref.use12Hours, _ref$hourStep = _ref.hourStep, hourStep = _ref$hourStep === void 0 ? 1 : _ref$hourStep, _ref$minuteStep = _ref.minuteStep, minuteStep = _ref$minuteStep === void 0 ? 1 : _ref$minuteStep, _ref$secondStep = _ref.secondStep, secondStep = _ref$secondStep === void 0 ? 1 : _ref$secondStep, _ref$millisecondStep = _ref.millisecondStep, millisecondStep = _ref$millisecondStep === void 0 ? 100 : _ref$millisecondStep, hideDisabledOptions = _ref.hideDisabledOptions, disabledTime = _ref.disabledTime, disabledHours = _ref.disabledHours, disabledMinutes = _ref.disabledMinutes, disabledSeconds = _ref.disabledSeconds; var mergedDate = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return date || generateConfig.getNow(); }, [date, generateConfig]); // ======================== Warnings ======================== if (true) { var isHourStepValid = 24 % hourStep === 0; var isMinuteStepValid = 60 % minuteStep === 0; var isSecondStepValid = 60 % secondStep === 0; (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(isHourStepValid, "`hourStep` ".concat(hourStep, " is invalid. It should be a factor of 24.")); (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(isMinuteStepValid, "`minuteStep` ".concat(minuteStep, " is invalid. It should be a factor of 60.")); (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(isSecondStepValid, "`secondStep` ".concat(secondStep, " is invalid. It should be a factor of 60.")); } // ======================== Disabled ======================== var getDisabledTimes = react__WEBPACK_IMPORTED_MODULE_3__.useCallback(function (targetDate) { var disabledConfig = (disabledTime === null || disabledTime === void 0 ? void 0 : disabledTime(targetDate)) || {}; return [disabledConfig.disabledHours || disabledHours || emptyDisabled, disabledConfig.disabledMinutes || disabledMinutes || emptyDisabled, disabledConfig.disabledSeconds || disabledSeconds || emptyDisabled, disabledConfig.disabledMilliseconds || emptyDisabled]; }, [disabledTime, disabledHours, disabledMinutes, disabledSeconds]); var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return getDisabledTimes(mergedDate); }, [mergedDate, getDisabledTimes]), _React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useMemo, 4), mergedDisabledHours = _React$useMemo2[0], mergedDisabledMinutes = _React$useMemo2[1], mergedDisabledSeconds = _React$useMemo2[2], mergedDisabledMilliseconds = _React$useMemo2[3]; // ========================= Column ========================= var getAllUnits = react__WEBPACK_IMPORTED_MODULE_3__.useCallback(function (getDisabledHours, getDisabledMinutes, getDisabledSeconds, getDisabledMilliseconds) { var hours = generateUnits(0, 23, hourStep, hideDisabledOptions, getDisabledHours()); // Hours var rowHourUnits = use12Hours ? hours.map(function (unit) { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, unit), {}, { label: (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_5__.leftPad)(unit.value % 12 || 12, 2) }); }) : hours; // Minutes var getMinuteUnits = function getMinuteUnits(nextHour) { return generateUnits(0, 59, minuteStep, hideDisabledOptions, getDisabledMinutes(nextHour)); }; // Seconds var getSecondUnits = function getSecondUnits(nextHour, nextMinute) { return generateUnits(0, 59, secondStep, hideDisabledOptions, getDisabledSeconds(nextHour, nextMinute)); }; // Milliseconds var getMillisecondUnits = function getMillisecondUnits(nextHour, nextMinute, nextSecond) { return generateUnits(0, 999, millisecondStep, hideDisabledOptions, getDisabledMilliseconds(nextHour, nextMinute, nextSecond), 3); }; return [rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits]; }, [hideDisabledOptions, hourStep, use12Hours, millisecondStep, minuteStep, secondStep]); var _React$useMemo3 = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return getAllUnits(mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds); }, [getAllUnits, mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds]), _React$useMemo4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useMemo3, 4), rowHourUnits = _React$useMemo4[0], getMinuteUnits = _React$useMemo4[1], getSecondUnits = _React$useMemo4[2], getMillisecondUnits = _React$useMemo4[3]; // ======================== Validate ======================== /** * Get validate time with `disabledTime`, `certainDate` to specific the date need to check */ var getValidTime = function getValidTime(nextTime, certainDate) { var getCheckHourUnits = function getCheckHourUnits() { return rowHourUnits; }; var getCheckMinuteUnits = getMinuteUnits; var getCheckSecondUnits = getSecondUnits; var getCheckMillisecondUnits = getMillisecondUnits; if (certainDate) { var _getDisabledTimes = getDisabledTimes(certainDate), _getDisabledTimes2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getDisabledTimes, 4), targetDisabledHours = _getDisabledTimes2[0], targetDisabledMinutes = _getDisabledTimes2[1], targetDisabledSeconds = _getDisabledTimes2[2], targetDisabledMilliseconds = _getDisabledTimes2[3]; var _getAllUnits = getAllUnits(targetDisabledHours, targetDisabledMinutes, targetDisabledSeconds, targetDisabledMilliseconds), _getAllUnits2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getAllUnits, 4), targetRowHourUnits = _getAllUnits2[0], targetGetMinuteUnits = _getAllUnits2[1], targetGetSecondUnits = _getAllUnits2[2], targetGetMillisecondUnits = _getAllUnits2[3]; getCheckHourUnits = function getCheckHourUnits() { return targetRowHourUnits; }; getCheckMinuteUnits = targetGetMinuteUnits; getCheckSecondUnits = targetGetSecondUnits; getCheckMillisecondUnits = targetGetMillisecondUnits; } var validateDate = (0,_PickerPanel_TimePanel_TimePanelBody_util__WEBPACK_IMPORTED_MODULE_4__.findValidateTime)(nextTime, getCheckHourUnits, getCheckMinuteUnits, getCheckSecondUnits, getCheckMillisecondUnits, generateConfig); return validateDate; }; return [ // getValidTime getValidTime, // Units rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useToggleDates.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useToggleDates.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useToggleDates) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /** * Toggles the presence of a value in an array. * If the value exists in the array, removed it. * Else add it. */ function useToggleDates(generateConfig, locale, panelMode) { function toggleDates(list, target) { var index = list.findIndex(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__.isSame)(generateConfig, locale, date, target, panelMode); }); if (index === -1) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(list), [target]); } var sliceList = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(list); sliceList.splice(index, 1); return sliceList; } return toggleDates; } /***/ }), /***/ "../../../node_modules/rc-picker/es/index.js": /*!***************************************************!*\ !*** ../../../node_modules/rc-picker/es/index.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Picker: () => (/* reexport safe */ _PickerInput_SinglePicker__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ PickerPanel: () => (/* reexport safe */ _PickerPanel__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ RangePicker: () => (/* reexport safe */ _PickerInput_RangePicker__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _PickerInput_RangePicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PickerInput/RangePicker */ "../../../node_modules/rc-picker/es/PickerInput/RangePicker.js"); /* harmony import */ var _PickerInput_SinglePicker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PickerInput/SinglePicker */ "../../../node_modules/rc-picker/es/PickerInput/SinglePicker.js"); /* harmony import */ var _PickerPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PickerPanel */ "../../../node_modules/rc-picker/es/PickerPanel/index.js"); /** * What's new? * - Common * - [Break] Support special year format, all the year will follow the locale config. * - Blur all of field will trigger `onChange` if validate * - Support `preserveInvalidOnBlur` to not to clean input if invalid and remove `changeOnBlur` * - `pickerValue` is now full controlled * - `defaultPickerValue` will take effect on every field active with popup opening. * - [Break] clear button return the event with `onClick` * * - Locale * - Remove `dateFormat` since it's never used * - Remove `dateTimeFormat` since it's never used * * - Picker * - TimePicker support `changeOnScroll` * - TimePicker support `millisecond` * - Support cellMeridiemFormat for AM/PM * - Get correct `disabledHours` when set `use12Hours` * - Support `showWeek` * * - RangePicker * - [Break] RangePicker is now not limit the range of clicked field. * - Trigger `onCalendarChange` when type correct * - [Break] Not order `value` if given `value` is wrong order. * - Hover `presets` will show date in input field. * - [Break] RangePicker go to end field, `pickerValue` will follow the start field if not controlled. */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_PickerInput_SinglePicker__WEBPACK_IMPORTED_MODULE_1__["default"]); /***/ }) }]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtcGlja2VyX2VzX2luZGV4X2pzLnZvbHVudGVlcmFwaS4zZjIxZTAwZTJhNDU0Mzc5NjEwMy5idW5kbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc0U7QUFDbEM7QUFDTDtBQUNtQjtBQUNYO0FBQ3hCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBZ0IsQ0FBQyxnREFBYTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDhEQUFXO0FBQ2hDLG9CQUFvQixvRkFBYztBQUNsQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLGdEQUFtQjtBQUM5RDtBQUNBLEdBQUcsZUFBZSxnREFBbUI7QUFDckMsZUFBZSxpREFBVTtBQUN6QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLDJDQUEyQyxnREFBbUI7QUFDOUQ7QUFDQSxHQUFHLGVBQWUsZ0RBQW1CO0FBQ3JDO0FBQ0E7QUFDQSxHQUFHO0FBQ0gseURBQXlELGdEQUFtQjtBQUM1RTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZ0RBQW1CO0FBQ3pDO0FBQ0EsR0FBRyw0QkFBNEIsZ0RBQW1CO0FBQ2xEO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEUwRDtBQUNXO0FBQ3RDO0FBQ2E7QUFDa0I7QUFDdkI7QUFDd0I7QUFDaEQ7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDZDQUFnQixDQUFDLGdEQUFhO0FBQ3hEO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsOENBQWlCO0FBQzVDLFdBQVcsMkVBQWU7QUFDMUIsR0FB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QUFhLEdBQUcsV0FBVztBQUN0RCxlQUFlLHdEQUFPO0FBQ3RCLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsd0JBQXdCLDBDQUFhO0FBQ3JDO0FBQ0EsS0FBSztBQUNMLHNCQUFzQixvRkFBYztBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixvRkFBYztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG9GQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMkZBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6SjhFO0FBQ25DO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQSxhQUFhLHVEQUFNO0FBQ25CLEtBQUs7QUFDTDtBQUNBLHVCQUF1Qix3RkFBa0I7QUFDekM7QUFDQSxvQkFBb0Isd0ZBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVvRDtBQUNKO0FBQ1I7QUFDSTtBQUM1QyxpRUFBZSxpRUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9Qb3B1cC9Gb290ZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L1BvcHVwL1BvcHVwUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L1BvcHVwL1ByZXNldFBhbmVsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9Qb3B1cC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvUmFuZ2VQaWNrZXIuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L1NlbGVjdG9yL0ljb24uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L1NlbGVjdG9yL0lucHV0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9TZWxlY3Rvci9NYXNrRm9ybWF0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9TZWxlY3Rvci9SYW5nZVNlbGVjdG9yLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9TZWxlY3Rvci9TaW5nbGVTZWxlY3Rvci9NdWx0aXBsZURhdGVzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9TZWxlY3Rvci9TaW5nbGVTZWxlY3Rvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvU2VsZWN0b3IvaG9va3MvdXNlQ2xlYXJJY29uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9TZWxlY3Rvci9ob29rcy91c2VJbnB1dFByb3BzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9TZWxlY3Rvci9ob29rcy91c2VSb290UHJvcHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L1NlbGVjdG9yL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L1NpbmdsZVBpY2tlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvY29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlQ2VsbFJlbmRlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlRGVsYXlTdGF0ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlRGlzYWJsZWRCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlRmllbGRGb3JtYXQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L2hvb2tzL3VzZUZpZWxkc0ludmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L2hvb2tzL3VzZUZpbGxlZFByb3BzLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9ob29rcy91c2VJbnB1dFJlYWRPbmx5LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9ob29rcy91c2VJbnZhbGlkYXRlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9ob29rcy91c2VMb2NrRWZmZWN0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9ob29rcy91c2VPcGVuLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9ob29rcy91c2VQaWNrZXJSZWYuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L2hvb2tzL3VzZVByZXNldHMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlcklucHV0L2hvb2tzL3VzZVJhbmdlQWN0aXZlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJJbnB1dC9ob29rcy91c2VSYW5nZURpc2FibGVkRGF0ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlUmFuZ2VQaWNrZXJWYWx1ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlUmFuZ2VWYWx1ZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VySW5wdXQvaG9va3MvdXNlU2hvd05vdy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvRGF0ZVBhbmVsL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9EYXRlVGltZVBhbmVsL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9EZWNhZGVQYW5lbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvTW9udGhQYW5lbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvUGFuZWxCb2R5LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9QYW5lbEhlYWRlci5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvUXVhcnRlclBhbmVsL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9UaW1lUGFuZWwvVGltZVBhbmVsQm9keS9UaW1lQ29sdW1uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9UaW1lUGFuZWwvVGltZVBhbmVsQm9keS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvVGltZVBhbmVsL1RpbWVQYW5lbEJvZHkvdXNlU2Nyb2xsVG8uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL1RpbWVQYW5lbC9UaW1lUGFuZWxCb2R5L3V0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL1RpbWVQYW5lbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvV2Vla1BhbmVsL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9ZZWFyUGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJUcmlnZ2VyL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJUcmlnZ2VyL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL2hvb2tzL3VzZUxvY2FsZS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvaG9va3MvdXNlU3luY1N0YXRlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9ob29rcy91c2VUaW1lQ29uZmlnLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9ob29rcy91c2VUaW1lSW5mby5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvaG9va3MvdXNlVG9nZ2xlRGF0ZXMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlVGltZUluZm8gZnJvbSBcIi4uLy4uL2hvb2tzL3VzZVRpbWVJbmZvXCI7XG5pbXBvcnQgUGlja2VyQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRm9vdGVyKHByb3BzKSB7XG4gIHZhciBtb2RlID0gcHJvcHMubW9kZSxcbiAgICBpbnRlcm5hbE1vZGUgPSBwcm9wcy5pbnRlcm5hbE1vZGUsXG4gICAgcmVuZGVyRXh0cmFGb290ZXIgPSBwcm9wcy5yZW5kZXJFeHRyYUZvb3RlcixcbiAgICBzaG93Tm93ID0gcHJvcHMuc2hvd05vdyxcbiAgICBzaG93VGltZSA9IHByb3BzLnNob3dUaW1lLFxuICAgIG9uU3VibWl0ID0gcHJvcHMub25TdWJtaXQsXG4gICAgb25Ob3cgPSBwcm9wcy5vbk5vdyxcbiAgICBpbnZhbGlkID0gcHJvcHMuaW52YWxpZCxcbiAgICBuZWVkQ29uZmlybSA9IHByb3BzLm5lZWRDb25maXJtLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgZGlzYWJsZWREYXRlID0gcHJvcHMuZGlzYWJsZWREYXRlO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFBpY2tlckNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscyxcbiAgICBsb2NhbGUgPSBfUmVhY3QkdXNlQ29udGV4dC5sb2NhbGUsXG4gICAgX1JlYWN0JHVzZUNvbnRleHQkYnV0ID0gX1JlYWN0JHVzZUNvbnRleHQuYnV0dG9uLFxuICAgIEJ1dHRvbiA9IF9SZWFjdCR1c2VDb250ZXh0JGJ1dCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfUmVhY3QkdXNlQ29udGV4dCRidXQ7XG5cbiAgLy8gPj4+IE5vd1xuICB2YXIgbm93ID0gZ2VuZXJhdGVDb25maWcuZ2V0Tm93KCk7XG4gIHZhciBfdXNlVGltZUluZm8gPSB1c2VUaW1lSW5mbyhnZW5lcmF0ZUNvbmZpZywgc2hvd1RpbWUsIG5vdyksXG4gICAgX3VzZVRpbWVJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VUaW1lSW5mbywgMSksXG4gICAgZ2V0VmFsaWRUaW1lID0gX3VzZVRpbWVJbmZvMlswXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRXh0cmEgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZXh0cmFOb2RlID0gcmVuZGVyRXh0cmFGb290ZXIgPT09IG51bGwgfHwgcmVuZGVyRXh0cmFGb290ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlbmRlckV4dHJhRm9vdGVyKG1vZGUpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSYW5nZXMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBub3dEaXNhYmxlZCA9IGRpc2FibGVkRGF0ZShub3csIHtcbiAgICB0eXBlOiBtb2RlXG4gIH0pO1xuICB2YXIgb25JbnRlcm5hbE5vdyA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxOb3coKSB7XG4gICAgaWYgKCFub3dEaXNhYmxlZCkge1xuICAgICAgdmFyIHZhbGlkYXRlTm93ID0gZ2V0VmFsaWRUaW1lKG5vdyk7XG4gICAgICBvbk5vdyh2YWxpZGF0ZU5vdyk7XG4gICAgfVxuICB9O1xuICB2YXIgbm93UHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ub3dcIik7XG4gIHZhciBub3dCdG5QcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChub3dQcmVmaXhDbHMsIFwiLWJ0blwiKTtcbiAgdmFyIHByZXNldE5vZGUgPSBzaG93Tm93ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwge1xuICAgIGNsYXNzTmFtZTogbm93UHJlZml4Q2xzXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKG5vd0J0blByZWZpeENscywgbm93RGlzYWJsZWQgJiYgXCJcIi5jb25jYXQobm93QnRuUHJlZml4Q2xzLCBcIi1kaXNhYmxlZFwiKSksXG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IG5vd0Rpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uSW50ZXJuYWxOb3dcbiAgfSwgaW50ZXJuYWxNb2RlID09PSAnZGF0ZScgPyBsb2NhbGUudG9kYXkgOiBsb2NhbGUubm93KSk7XG5cbiAgLy8gPj4+IE9LXG4gIHZhciBva05vZGUgPSBuZWVkQ29uZmlybSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItb2tcIilcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgZGlzYWJsZWQ6IGludmFsaWQsXG4gICAgb25DbGljazogb25TdWJtaXRcbiAgfSwgbG9jYWxlLm9rKSk7XG4gIHZhciByYW5nZU5vZGUgPSAocHJlc2V0Tm9kZSB8fCBva05vZGUpICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1yYW5nZXNcIilcbiAgfSwgcHJlc2V0Tm9kZSwgb2tOb2RlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAoIWV4dHJhTm9kZSAmJiAhcmFuZ2VOb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZm9vdGVyXCIpXG4gIH0sIGV4dHJhTm9kZSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWZvb3Rlci1leHRyYVwiKVxuICB9LCBleHRyYU5vZGUpLCByYW5nZU5vZGUpO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQaWNrZXJQYW5lbCBmcm9tIFwiLi4vLi4vUGlja2VyUGFuZWxcIjtcbmltcG9ydCB7IFBpY2tlckhhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uL1BpY2tlclBhbmVsL2NvbnRleHRcIjtcbmltcG9ydCBQaWNrZXJDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBvZmZzZXRQYW5lbERhdGUgfSBmcm9tIFwiLi4vaG9va3MvdXNlUmFuZ2VQaWNrZXJWYWx1ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9wdXBQYW5lbChwcm9wcykge1xuICB2YXIgcGlja2VyID0gcHJvcHMucGlja2VyLFxuICAgIG11bHRpcGxlUGFuZWwgPSBwcm9wcy5tdWx0aXBsZVBhbmVsLFxuICAgIHBpY2tlclZhbHVlID0gcHJvcHMucGlja2VyVmFsdWUsXG4gICAgb25QaWNrZXJWYWx1ZUNoYW5nZSA9IHByb3BzLm9uUGlja2VyVmFsdWVDaGFuZ2UsXG4gICAgbmVlZENvbmZpcm0gPSBwcm9wcy5uZWVkQ29uZmlybSxcbiAgICBvblN1Ym1pdCA9IHByb3BzLm9uU3VibWl0LFxuICAgIHJhbmdlID0gcHJvcHMucmFuZ2UsXG4gICAgaG92ZXJWYWx1ZSA9IHByb3BzLmhvdmVyVmFsdWU7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VyQ29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gX1JlYWN0JHVzZUNvbnRleHQuZ2VuZXJhdGVDb25maWc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IE9mZnNldCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGludGVybmFsT2Zmc2V0RGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChkYXRlLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gb2Zmc2V0UGFuZWxEYXRlKGdlbmVyYXRlQ29uZmlnLCBwaWNrZXIsIGRhdGUsIG9mZnNldCk7XG4gIH0sIFtnZW5lcmF0ZUNvbmZpZywgcGlja2VyXSk7XG4gIHZhciBuZXh0UGlja2VyVmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW50ZXJuYWxPZmZzZXREYXRlKHBpY2tlclZhbHVlLCAxKTtcbiAgfSwgW3BpY2tlclZhbHVlLCBpbnRlcm5hbE9mZnNldERhdGVdKTtcblxuICAvLyBPdXRzaWRlXG4gIHZhciBvblNlY29uZFBpY2tlclZhbHVlQ2hhbmdlID0gZnVuY3Rpb24gb25TZWNvbmRQaWNrZXJWYWx1ZUNoYW5nZShuZXh0RGF0ZSkge1xuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UoaW50ZXJuYWxPZmZzZXREYXRlKG5leHREYXRlLCAtMSkpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IENvbnRleHQgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzaGFyZWRDb250ZXh0ID0ge1xuICAgIG9uQ2VsbERibENsaWNrOiBmdW5jdGlvbiBvbkNlbGxEYmxDbGljaygpIHtcbiAgICAgIGlmIChuZWVkQ29uZmlybSkge1xuICAgICAgICBvblN1Ym1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGhpZGVIZWFkZXIgPSBwaWNrZXIgPT09ICd0aW1lJztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUHJvcHMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcGlja2VyUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBob3ZlclZhbHVlOiBudWxsLFxuICAgIGhvdmVyUmFuZ2VWYWx1ZTogbnVsbCxcbiAgICBoaWRlSGVhZGVyOiBoaWRlSGVhZGVyXG4gIH0pO1xuICBpZiAocmFuZ2UpIHtcbiAgICBwaWNrZXJQcm9wcy5ob3ZlclJhbmdlVmFsdWUgPSBob3ZlclZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHBpY2tlclByb3BzLmhvdmVyVmFsdWUgPSBob3ZlclZhbHVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTXVsdGlwbGVcbiAgaWYgKG11bHRpcGxlUGFuZWwpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXBhbmVsc1wiKVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBpY2tlckhhY2tDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzaGFyZWRDb250ZXh0KSwge30sIHtcbiAgICAgICAgaGlkZU5leHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGlja2VyUGFuZWwsIHBpY2tlclByb3BzKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBpY2tlckhhY2tDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzaGFyZWRDb250ZXh0KSwge30sIHtcbiAgICAgICAgaGlkZVByZXY6IHRydWVcbiAgICAgIH0pXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGlja2VyUGFuZWwsIF9leHRlbmRzKHt9LCBwaWNrZXJQcm9wcywge1xuICAgICAgcGlja2VyVmFsdWU6IG5leHRQaWNrZXJWYWx1ZSxcbiAgICAgIG9uUGlja2VyVmFsdWVDaGFuZ2U6IG9uU2Vjb25kUGlja2VyVmFsdWVDaGFuZ2VcbiAgICB9KSkpKTtcbiAgfVxuXG4gIC8vIFNpbmdsZVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGlja2VySGFja0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogX29iamVjdFNwcmVhZCh7fSwgc2hhcmVkQ29udGV4dClcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGlja2VyUGFuZWwsIHBpY2tlclByb3BzKSk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZnVuY3Rpb24gZXhlY3V0ZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZSgpIDogdmFsdWU7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcmVzZXRQYW5lbChwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZXNldHMgPSBwcm9wcy5wcmVzZXRzLFxuICAgIF9vbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbkhvdmVyID0gcHJvcHMub25Ib3ZlcjtcbiAgaWYgKCFwcmVzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXByZXNldHNcIilcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBudWxsLCBwcmVzZXRzLm1hcChmdW5jdGlvbiAoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcbiAgICAgIGtleTogaW5kZXgsXG4gICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICBfb25DbGljayhleGVjdXRlVmFsdWUodmFsdWUpKTtcbiAgICAgIH0sXG4gICAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgb25Ib3ZlcihleGVjdXRlVmFsdWUodmFsdWUpKTtcbiAgICAgIH0sXG4gICAgICBvbk1vdXNlTGVhdmU6IGZ1bmN0aW9uIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgICAgb25Ib3ZlcihudWxsKTtcbiAgICAgIH1cbiAgICB9LCBsYWJlbCk7XG4gIH0pKSk7XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tICdyYy1yZXNpemUtb2JzZXJ2ZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gXCIuLi8uLi91dGlscy9taXNjVXRpbFwiO1xuaW1wb3J0IFBpY2tlckNvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBGb290ZXIgZnJvbSBcIi4vRm9vdGVyXCI7XG5pbXBvcnQgUG9wdXBQYW5lbCBmcm9tIFwiLi9Qb3B1cFBhbmVsXCI7XG5pbXBvcnQgUHJlc2V0UGFuZWwgZnJvbSBcIi4vUHJlc2V0UGFuZWxcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBvcHVwKHByb3BzKSB7XG4gIHZhciBwYW5lbFJlbmRlciA9IHByb3BzLnBhbmVsUmVuZGVyLFxuICAgIGludGVybmFsTW9kZSA9IHByb3BzLmludGVybmFsTW9kZSxcbiAgICBwaWNrZXIgPSBwcm9wcy5waWNrZXIsXG4gICAgc2hvd05vdyA9IHByb3BzLnNob3dOb3csXG4gICAgcmFuZ2UgPSBwcm9wcy5yYW5nZSxcbiAgICBtdWx0aXBsZSA9IHByb3BzLm11bHRpcGxlLFxuICAgIF9wcm9wcyRhY3RpdmVJbmZvID0gcHJvcHMuYWN0aXZlSW5mbyxcbiAgICBhY3RpdmVJbmZvID0gX3Byb3BzJGFjdGl2ZUluZm8gPT09IHZvaWQgMCA/IFswLCAwLCAwXSA6IF9wcm9wcyRhY3RpdmVJbmZvLFxuICAgIHByZXNldHMgPSBwcm9wcy5wcmVzZXRzLFxuICAgIG9uUHJlc2V0SG92ZXIgPSBwcm9wcy5vblByZXNldEhvdmVyLFxuICAgIG9uUHJlc2V0U3VibWl0ID0gcHJvcHMub25QcmVzZXRTdWJtaXQsXG4gICAgb25Gb2N1cyA9IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyID0gcHJvcHMub25CbHVyLFxuICAgIG9uUGFuZWxNb3VzZURvd24gPSBwcm9wcy5vblBhbmVsTW91c2VEb3duLFxuICAgIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIG9uU2VsZWN0ID0gcHJvcHMub25TZWxlY3QsXG4gICAgaXNJbnZhbGlkID0gcHJvcHMuaXNJbnZhbGlkLFxuICAgIGRlZmF1bHRPcGVuVmFsdWUgPSBwcm9wcy5kZWZhdWx0T3BlblZhbHVlLFxuICAgIG9uT2sgPSBwcm9wcy5vbk9rLFxuICAgIG9uU3VibWl0ID0gcHJvcHMub25TdWJtaXQ7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VyQ29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXBhbmVsXCIpO1xuICB2YXIgcnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgYXJyb3dSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciB3cmFwcGVyUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBPZmZzZXQgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBjb250YWluZXJXaWR0aCA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0Q29udGFpbmVyV2lkdGggPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBjb250YWluZXJPZmZzZXQgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldENvbnRhaW5lck9mZnNldCA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBfUmVhY3QkdXNlU3RhdGU1ID0gUmVhY3QudXNlU3RhdGUoMCksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIGFycm93T2Zmc2V0ID0gX1JlYWN0JHVzZVN0YXRlNlswXSxcbiAgICBzZXRBcnJvd09mZnNldCA9IF9SZWFjdCR1c2VTdGF0ZTZbMV07XG4gIHZhciBvblJlc2l6ZSA9IGZ1bmN0aW9uIG9uUmVzaXplKGluZm8pIHtcbiAgICBpZiAoaW5mby53aWR0aCkge1xuICAgICAgc2V0Q29udGFpbmVyV2lkdGgoaW5mby53aWR0aCk7XG4gICAgfVxuICB9O1xuICB2YXIgX2FjdGl2ZUluZm8gPSBfc2xpY2VkVG9BcnJheShhY3RpdmVJbmZvLCAzKSxcbiAgICBhY3RpdmVJbnB1dExlZnQgPSBfYWN0aXZlSW5mb1swXSxcbiAgICBhY3RpdmVJbnB1dFJpZ2h0ID0gX2FjdGl2ZUluZm9bMV0sXG4gICAgc2VsZWN0b3JXaWR0aCA9IF9hY3RpdmVJbmZvWzJdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNyA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGU3LCAyKSxcbiAgICByZXRyeVRpbWVzID0gX1JlYWN0JHVzZVN0YXRlOFswXSxcbiAgICBzZXRSZXRyeVRpbWVzID0gX1JlYWN0JHVzZVN0YXRlOFsxXTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRSZXRyeVRpbWVzKDEwKTtcbiAgfSwgW2FjdGl2ZUlucHV0TGVmdF0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIGBhY3RpdmVPZmZzZXRgIGlzIGFsd2F5cyBhbGlnbiB3aXRoIHRoZSBhY3RpdmUgaW5wdXQgZWxlbWVudFxuICAgIC8vIFNvIHdlIG5lZWQgb25seSBjaGVjayBjb250YWluZXIgY29udGFpbnMgdGhlIGBhY3RpdmVPZmZzZXRgXG4gICAgaWYgKHJhbmdlICYmIHdyYXBwZXJSZWYuY3VycmVudCkge1xuICAgICAgdmFyIF9hcnJvd1JlZiRjdXJyZW50O1xuICAgICAgLy8gT2Zmc2V0IGluIGNhc2UgY29udGFpbmVyIGhhcyBib3JkZXIgcmFkaXVzXG4gICAgICB2YXIgYXJyb3dXaWR0aCA9ICgoX2Fycm93UmVmJGN1cnJlbnQgPSBhcnJvd1JlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYXJyb3dSZWYkY3VycmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Fycm93UmVmJGN1cnJlbnQub2Zmc2V0V2lkdGgpIHx8IDA7XG5cbiAgICAgIC8vIEFycm93IE9mZnNldFxuICAgICAgdmFyIHdyYXBwZXJSZWN0ID0gd3JhcHBlclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKCF3cmFwcGVyUmVjdC5oZWlnaHQgfHwgd3JhcHBlclJlY3QucmlnaHQgPCAwKSB7XG4gICAgICAgIHNldFJldHJ5VGltZXMoZnVuY3Rpb24gKHRpbWVzKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRpbWVzIC0gMSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV4dEFycm93T2Zmc2V0ID0gKHJ0bCA/IGFjdGl2ZUlucHV0UmlnaHQgLSBhcnJvd1dpZHRoIDogYWN0aXZlSW5wdXRMZWZ0KSAtIHdyYXBwZXJSZWN0LmxlZnQ7XG4gICAgICBzZXRBcnJvd09mZnNldChuZXh0QXJyb3dPZmZzZXQpO1xuXG4gICAgICAvLyBDb250YWluZXIgT2Zmc2V0XG4gICAgICBpZiAoY29udGFpbmVyV2lkdGggJiYgY29udGFpbmVyV2lkdGggPCBzZWxlY3RvcldpZHRoKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBydGwgPyB3cmFwcGVyUmVjdC5yaWdodCAtIChhY3RpdmVJbnB1dFJpZ2h0IC0gYXJyb3dXaWR0aCArIGNvbnRhaW5lcldpZHRoKSA6IGFjdGl2ZUlucHV0TGVmdCArIGFycm93V2lkdGggLSB3cmFwcGVyUmVjdC5sZWZ0IC0gY29udGFpbmVyV2lkdGg7XG4gICAgICAgIHZhciBzYWZlT2Zmc2V0ID0gTWF0aC5tYXgoMCwgb2Zmc2V0KTtcbiAgICAgICAgc2V0Q29udGFpbmVyT2Zmc2V0KHNhZmVPZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29udGFpbmVyT2Zmc2V0KDApO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3JldHJ5VGltZXMsIHJ0bCwgY29udGFpbmVyV2lkdGgsIGFjdGl2ZUlucHV0TGVmdCwgYWN0aXZlSW5wdXRSaWdodCwgc2VsZWN0b3JXaWR0aCwgcmFuZ2VdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ3VzdG9tID09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBmaWx0ZXJFbXB0eShsaXN0KSB7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgfVxuICB2YXIgdmFsdWVMaXN0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZpbHRlckVtcHR5KHRvQXJyYXkodmFsdWUpKTtcbiAgfSwgW3ZhbHVlXSk7XG4gIHZhciBpc1RpbWVQaWNrZXJFbXB0eVZhbHVlID0gcGlja2VyID09PSAndGltZScgJiYgIXZhbHVlTGlzdC5sZW5ndGg7XG4gIHZhciBmb290ZXJTdWJtaXRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc1RpbWVQaWNrZXJFbXB0eVZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyRW1wdHkoW2RlZmF1bHRPcGVuVmFsdWVdKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlTGlzdDtcbiAgfSwgW2lzVGltZVBpY2tlckVtcHR5VmFsdWUsIHZhbHVlTGlzdCwgZGVmYXVsdE9wZW5WYWx1ZV0pO1xuICB2YXIgcG9wdXBQYW5lbFZhbHVlID0gaXNUaW1lUGlja2VyRW1wdHlWYWx1ZSA/IGRlZmF1bHRPcGVuVmFsdWUgOiB2YWx1ZUxpc3Q7XG4gIHZhciBkaXNhYmxlU3VibWl0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gRW1wdHkgaXMgaW52YWxpZFxuICAgIGlmICghZm9vdGVyU3VibWl0VmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZvb3RlclN1Ym1pdFZhbHVlLnNvbWUoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuIGlzSW52YWxpZCh2YWwpO1xuICAgIH0pO1xuICB9LCBbZm9vdGVyU3VibWl0VmFsdWUsIGlzSW52YWxpZF0pO1xuICB2YXIgb25Gb290ZXJTdWJtaXQgPSBmdW5jdGlvbiBvbkZvb3RlclN1Ym1pdCgpIHtcbiAgICAvLyBGb3IgVGltZVBpY2tlciwgd2Ugd2lsbCBhZGRpdGlvbmFsIHRyaWdnZXIgdGhlIHZhbHVlIHVwZGF0ZVxuICAgIGlmIChpc1RpbWVQaWNrZXJFbXB0eVZhbHVlKSB7XG4gICAgICBvblNlbGVjdChkZWZhdWx0T3BlblZhbHVlKTtcbiAgICB9XG4gICAgb25PaygpO1xuICAgIG9uU3VibWl0KCk7XG4gIH07XG4gIHZhciBtZXJnZWROb2RlcyA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcGFuZWwtbGF5b3V0XCIpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByZXNldFBhbmVsLCB7XG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcHJlc2V0czogcHJlc2V0cyxcbiAgICBvbkNsaWNrOiBvblByZXNldFN1Ym1pdCxcbiAgICBvbkhvdmVyOiBvblByZXNldEhvdmVyXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cFBhbmVsLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogcG9wdXBQYW5lbFZhbHVlXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9vdGVyLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBzaG93Tm93OiBtdWx0aXBsZSA/IGZhbHNlIDogc2hvd05vdyxcbiAgICBpbnZhbGlkOiBkaXNhYmxlU3VibWl0LFxuICAgIG9uU3VibWl0OiBvbkZvb3RlclN1Ym1pdFxuICB9KSkpKTtcbiAgaWYgKHBhbmVsUmVuZGVyKSB7XG4gICAgbWVyZ2VkTm9kZXMgPSBwYW5lbFJlbmRlcihtZXJnZWROb2Rlcyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY29udGFpbmVyUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocGFuZWxQcmVmaXhDbHMsIFwiLWNvbnRhaW5lclwiKTtcbiAgdmFyIG1hcmdpbkxlZnQgPSAnbWFyZ2luTGVmdCc7XG4gIHZhciBtYXJnaW5SaWdodCA9ICdtYXJnaW5SaWdodCc7XG5cbiAgLy8gQ29udGFpbmVyXG4gIHZhciByZW5kZXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIG9uTW91c2VEb3duOiBvblBhbmVsTW91c2VEb3duLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY29udGFpbmVyUHJlZml4Q2xzLCAvLyBVc2VkIGZvciBUb2RheSBCdXR0b24gc3R5bGUsIHNhZmUgdG8gcmVtb3ZlIGlmIG5vIG5lZWRcbiAgICBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQoaW50ZXJuYWxNb2RlLCBcIi1wYW5lbC1jb250YWluZXJcIikpLFxuICAgIHN0eWxlOiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBydGwgPyBtYXJnaW5SaWdodCA6IG1hcmdpbkxlZnQsIGNvbnRhaW5lck9mZnNldCksIHJ0bCA/IG1hcmdpbkxlZnQgOiBtYXJnaW5SaWdodCwgJ2F1dG8nKVxuICAgIC8vIFN0aWxsIHdpc2ggbm90IHRvIGxvc2UgZm9jdXMgb24gbW91c2UgZG93blxuICAgIC8vIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgIC8vICAgLy8gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIH19XG4gICAgLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgb25CbHVyOiBvbkJsdXJcbiAgfSwgbWVyZ2VkTm9kZXMpO1xuICBpZiAocmFuZ2UpIHtcbiAgICByZW5kZXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgb25Nb3VzZURvd246IG9uUGFuZWxNb3VzZURvd24sXG4gICAgICByZWY6IHdyYXBwZXJSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1yYW5nZS13cmFwcGVyXCIpLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQocGlja2VyLCBcIi1yYW5nZS13cmFwcGVyXCIpKVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIHJlZjogYXJyb3dSZWYsXG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcmFuZ2UtYXJyb3dcIiksXG4gICAgICBzdHlsZToge1xuICAgICAgICBsZWZ0OiBhcnJvd09mZnNldFxuICAgICAgfVxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXNpemVPYnNlcnZlciwge1xuICAgICAgb25SZXNpemU6IG9uUmVzaXplXG4gICAgfSwgcmVuZGVyTm9kZSkpO1xuICB9XG4gIHJldHVybiByZW5kZXJOb2RlO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IHVzZUV2ZW50LCB1c2VNZXJnZWRTdGF0ZSB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCBvbWl0IGZyb20gXCJyYy11dGlsL2VzL29taXRcIjtcbmltcG9ydCBwaWNrQXR0cnMgZnJvbSBcInJjLXV0aWwvZXMvcGlja0F0dHJzXCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGlja2VyVHJpZ2dlciBmcm9tIFwiLi4vUGlja2VyVHJpZ2dlclwiO1xuaW1wb3J0IHsgcGlja1RyaWdnZXJQcm9wcyB9IGZyb20gXCIuLi9QaWNrZXJUcmlnZ2VyL3V0aWxcIjtcbmltcG9ydCB7IGZpbGxJbmRleCwgZ2V0RnJvbURhdGUsIHRvQXJyYXkgfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmltcG9ydCBQaWNrZXJDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCB1c2VDZWxsUmVuZGVyIGZyb20gXCIuL2hvb2tzL3VzZUNlbGxSZW5kZXJcIjtcbmltcG9ydCB1c2VGaWVsZHNJbnZhbGlkYXRlIGZyb20gXCIuL2hvb2tzL3VzZUZpZWxkc0ludmFsaWRhdGVcIjtcbmltcG9ydCB1c2VGaWxsZWRQcm9wcyBmcm9tIFwiLi9ob29rcy91c2VGaWxsZWRQcm9wc1wiO1xuaW1wb3J0IHVzZU9wZW4gZnJvbSBcIi4vaG9va3MvdXNlT3BlblwiO1xuaW1wb3J0IHVzZVBpY2tlclJlZiBmcm9tIFwiLi9ob29rcy91c2VQaWNrZXJSZWZcIjtcbmltcG9ydCB1c2VQcmVzZXRzIGZyb20gXCIuL2hvb2tzL3VzZVByZXNldHNcIjtcbmltcG9ydCB1c2VSYW5nZUFjdGl2ZSBmcm9tIFwiLi9ob29rcy91c2VSYW5nZUFjdGl2ZVwiO1xuaW1wb3J0IHVzZVJhbmdlRGlzYWJsZWREYXRlIGZyb20gXCIuL2hvb2tzL3VzZVJhbmdlRGlzYWJsZWREYXRlXCI7XG5pbXBvcnQgdXNlUmFuZ2VQaWNrZXJWYWx1ZSBmcm9tIFwiLi9ob29rcy91c2VSYW5nZVBpY2tlclZhbHVlXCI7XG5pbXBvcnQgdXNlUmFuZ2VWYWx1ZSwgeyB1c2VJbm5lclZhbHVlIH0gZnJvbSBcIi4vaG9va3MvdXNlUmFuZ2VWYWx1ZVwiO1xuaW1wb3J0IHVzZVNob3dOb3cgZnJvbSBcIi4vaG9va3MvdXNlU2hvd05vd1wiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCIuL1BvcHVwXCI7XG5pbXBvcnQgUmFuZ2VTZWxlY3RvciBmcm9tIFwiLi9TZWxlY3Rvci9SYW5nZVNlbGVjdG9yXCI7XG5mdW5jdGlvbiBzZXBhcmF0ZUNvbmZpZyhjb25maWcsIGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIHNpbmdsZUNvbmZpZyA9IGNvbmZpZyAhPT0gbnVsbCAmJiBjb25maWcgIT09IHZvaWQgMCA/IGNvbmZpZyA6IGRlZmF1bHRDb25maWc7XG4gIGlmIChBcnJheS5pc0FycmF5KHNpbmdsZUNvbmZpZykpIHtcbiAgICByZXR1cm4gc2luZ2xlQ29uZmlnO1xuICB9XG4gIHJldHVybiBbc2luZ2xlQ29uZmlnLCBzaW5nbGVDb25maWddO1xufVxuXG4vKiogVXNlZCBmb3IgY2hhbmdlIGV2ZW50LCBpdCBzaG91bGQgYWx3YXlzIGJlIG5vdCB1bmRlZmluZWQgKi9cblxuZnVuY3Rpb24gZ2V0QWN0aXZlUmFuZ2UoYWN0aXZlSW5kZXgpIHtcbiAgcmV0dXJuIGFjdGl2ZUluZGV4ID09PSAxID8gJ2VuZCcgOiAnc3RhcnQnO1xufVxuZnVuY3Rpb24gUmFuZ2VQaWNrZXIocHJvcHMsIHJlZikge1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFByb3AgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUZpbGxlZFByb3BzID0gdXNlRmlsbGVkUHJvcHMocHJvcHMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgICAgICBhbGxvd0VtcHR5ID0gcHJvcHMuYWxsb3dFbXB0eTtcbiAgICAgIHZhciBtZXJnZWREaXNhYmxlZCA9IHNlcGFyYXRlQ29uZmlnKGRpc2FibGVkLCBmYWxzZSk7XG4gICAgICB2YXIgbWVyZ2VkQWxsb3dFbXB0eSA9IHNlcGFyYXRlQ29uZmlnKGFsbG93RW1wdHksIGZhbHNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc2FibGVkOiBtZXJnZWREaXNhYmxlZCxcbiAgICAgICAgYWxsb3dFbXB0eTogbWVyZ2VkQWxsb3dFbXB0eVxuICAgICAgfTtcbiAgICB9KSxcbiAgICBfdXNlRmlsbGVkUHJvcHMyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUZpbGxlZFByb3BzLCA2KSxcbiAgICBmaWxsZWRQcm9wcyA9IF91c2VGaWxsZWRQcm9wczJbMF0sXG4gICAgaW50ZXJuYWxQaWNrZXIgPSBfdXNlRmlsbGVkUHJvcHMyWzFdLFxuICAgIGNvbXBsZXhQaWNrZXIgPSBfdXNlRmlsbGVkUHJvcHMyWzJdLFxuICAgIGZvcm1hdExpc3QgPSBfdXNlRmlsbGVkUHJvcHMyWzNdLFxuICAgIG1hc2tGb3JtYXQgPSBfdXNlRmlsbGVkUHJvcHMyWzRdLFxuICAgIGlzSW52YWxpZGF0ZURhdGUgPSBfdXNlRmlsbGVkUHJvcHMyWzVdO1xuICB2YXIgcHJlZml4Q2xzID0gZmlsbGVkUHJvcHMucHJlZml4Q2xzLFxuICAgIHN0eWxlcyA9IGZpbGxlZFByb3BzLnN0eWxlcyxcbiAgICBjbGFzc05hbWVzID0gZmlsbGVkUHJvcHMuY2xhc3NOYW1lcyxcbiAgICBkZWZhdWx0VmFsdWUgPSBmaWxsZWRQcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgdmFsdWUgPSBmaWxsZWRQcm9wcy52YWx1ZSxcbiAgICBuZWVkQ29uZmlybSA9IGZpbGxlZFByb3BzLm5lZWRDb25maXJtLFxuICAgIG9uS2V5RG93biA9IGZpbGxlZFByb3BzLm9uS2V5RG93bixcbiAgICBkaXNhYmxlZCA9IGZpbGxlZFByb3BzLmRpc2FibGVkLFxuICAgIGFsbG93RW1wdHkgPSBmaWxsZWRQcm9wcy5hbGxvd0VtcHR5LFxuICAgIGRpc2FibGVkRGF0ZSA9IGZpbGxlZFByb3BzLmRpc2FibGVkRGF0ZSxcbiAgICBtaW5EYXRlID0gZmlsbGVkUHJvcHMubWluRGF0ZSxcbiAgICBtYXhEYXRlID0gZmlsbGVkUHJvcHMubWF4RGF0ZSxcbiAgICBkZWZhdWx0T3BlbiA9IGZpbGxlZFByb3BzLmRlZmF1bHRPcGVuLFxuICAgIG9wZW4gPSBmaWxsZWRQcm9wcy5vcGVuLFxuICAgIG9uT3BlbkNoYW5nZSA9IGZpbGxlZFByb3BzLm9uT3BlbkNoYW5nZSxcbiAgICBsb2NhbGUgPSBmaWxsZWRQcm9wcy5sb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBmaWxsZWRQcm9wcy5nZW5lcmF0ZUNvbmZpZyxcbiAgICBwaWNrZXIgPSBmaWxsZWRQcm9wcy5waWNrZXIsXG4gICAgc2hvd05vdyA9IGZpbGxlZFByb3BzLnNob3dOb3csXG4gICAgc2hvd1RvZGF5ID0gZmlsbGVkUHJvcHMuc2hvd1RvZGF5LFxuICAgIHNob3dUaW1lID0gZmlsbGVkUHJvcHMuc2hvd1RpbWUsXG4gICAgbW9kZSA9IGZpbGxlZFByb3BzLm1vZGUsXG4gICAgb25QYW5lbENoYW5nZSA9IGZpbGxlZFByb3BzLm9uUGFuZWxDaGFuZ2UsXG4gICAgb25DYWxlbmRhckNoYW5nZSA9IGZpbGxlZFByb3BzLm9uQ2FsZW5kYXJDaGFuZ2UsXG4gICAgb25PayA9IGZpbGxlZFByb3BzLm9uT2ssXG4gICAgZGVmYXVsdFBpY2tlclZhbHVlID0gZmlsbGVkUHJvcHMuZGVmYXVsdFBpY2tlclZhbHVlLFxuICAgIHBpY2tlclZhbHVlID0gZmlsbGVkUHJvcHMucGlja2VyVmFsdWUsXG4gICAgb25QaWNrZXJWYWx1ZUNoYW5nZSA9IGZpbGxlZFByb3BzLm9uUGlja2VyVmFsdWVDaGFuZ2UsXG4gICAgaW5wdXRSZWFkT25seSA9IGZpbGxlZFByb3BzLmlucHV0UmVhZE9ubHksXG4gICAgc3VmZml4SWNvbiA9IGZpbGxlZFByb3BzLnN1ZmZpeEljb24sXG4gICAgb25Gb2N1cyA9IGZpbGxlZFByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyID0gZmlsbGVkUHJvcHMub25CbHVyLFxuICAgIHByZXNldHMgPSBmaWxsZWRQcm9wcy5wcmVzZXRzLFxuICAgIHJhbmdlcyA9IGZpbGxlZFByb3BzLnJhbmdlcyxcbiAgICBjb21wb25lbnRzID0gZmlsbGVkUHJvcHMuY29tcG9uZW50cyxcbiAgICBjZWxsUmVuZGVyID0gZmlsbGVkUHJvcHMuY2VsbFJlbmRlcixcbiAgICBkYXRlUmVuZGVyID0gZmlsbGVkUHJvcHMuZGF0ZVJlbmRlcixcbiAgICBtb250aENlbGxSZW5kZXIgPSBmaWxsZWRQcm9wcy5tb250aENlbGxSZW5kZXIsXG4gICAgb25DbGljayA9IGZpbGxlZFByb3BzLm9uQ2xpY2s7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHNlbGVjdG9yUmVmID0gdXNlUGlja2VyUmVmKHJlZik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBPcGVuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VPcGVuID0gdXNlT3BlbihvcGVuLCBkZWZhdWx0T3BlbiwgZGlzYWJsZWQsIG9uT3BlbkNoYW5nZSksXG4gICAgX3VzZU9wZW4yID0gX3NsaWNlZFRvQXJyYXkoX3VzZU9wZW4sIDIpLFxuICAgIG1lcmdlZE9wZW4gPSBfdXNlT3BlbjJbMF0sXG4gICAgc2V0TWVyZ2VPcGVuID0gX3VzZU9wZW4yWzFdO1xuICB2YXIgdHJpZ2dlck9wZW4gPSBmdW5jdGlvbiB0cmlnZ2VyT3BlbihuZXh0T3BlbiwgY29uZmlnKSB7XG4gICAgLy8gTm8gbmVlZCB0byBvcGVuIGlmIGFsbCBkaXNhYmxlZFxuICAgIGlmIChkaXNhYmxlZC5zb21lKGZ1bmN0aW9uIChmaWVsZERpc2FibGVkKSB7XG4gICAgICByZXR1cm4gIWZpZWxkRGlzYWJsZWQ7XG4gICAgfSkgfHwgIW5leHRPcGVuKSB7XG4gICAgICBzZXRNZXJnZU9wZW4obmV4dE9wZW4sIGNvbmZpZyk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZXMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlSW5uZXJWYWx1ZSA9IHVzZUlubmVyVmFsdWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgZm9ybWF0TGlzdCwgdHJ1ZSwgZmFsc2UsIGRlZmF1bHRWYWx1ZSwgdmFsdWUsIG9uQ2FsZW5kYXJDaGFuZ2UsIG9uT2spLFxuICAgIF91c2VJbm5lclZhbHVlMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclZhbHVlLCA1KSxcbiAgICBtZXJnZWRWYWx1ZSA9IF91c2VJbm5lclZhbHVlMlswXSxcbiAgICBzZXRJbm5lclZhbHVlID0gX3VzZUlubmVyVmFsdWUyWzFdLFxuICAgIGdldENhbGVuZGFyVmFsdWUgPSBfdXNlSW5uZXJWYWx1ZTJbMl0sXG4gICAgdHJpZ2dlckNhbGVuZGFyQ2hhbmdlID0gX3VzZUlubmVyVmFsdWUyWzNdLFxuICAgIHRyaWdnZXJPayA9IF91c2VJbm5lclZhbHVlMls0XTtcbiAgdmFyIGNhbGVuZGFyVmFsdWUgPSBnZXRDYWxlbmRhclZhbHVlKCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEFjdGl2ZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VSYW5nZUFjdGl2ZSA9IHVzZVJhbmdlQWN0aXZlKGRpc2FibGVkLCBhbGxvd0VtcHR5LCBtZXJnZWRPcGVuKSxcbiAgICBfdXNlUmFuZ2VBY3RpdmUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVJhbmdlQWN0aXZlLCA5KSxcbiAgICBmb2N1c2VkID0gX3VzZVJhbmdlQWN0aXZlMlswXSxcbiAgICB0cmlnZ2VyRm9jdXMgPSBfdXNlUmFuZ2VBY3RpdmUyWzFdLFxuICAgIGxhc3RPcGVyYXRpb24gPSBfdXNlUmFuZ2VBY3RpdmUyWzJdLFxuICAgIGFjdGl2ZUluZGV4ID0gX3VzZVJhbmdlQWN0aXZlMlszXSxcbiAgICBzZXRBY3RpdmVJbmRleCA9IF91c2VSYW5nZUFjdGl2ZTJbNF0sXG4gICAgbmV4dEFjdGl2ZUluZGV4ID0gX3VzZVJhbmdlQWN0aXZlMls1XSxcbiAgICBhY3RpdmVJbmRleExpc3QgPSBfdXNlUmFuZ2VBY3RpdmUyWzZdLFxuICAgIHVwZGF0ZVN1Ym1pdEluZGV4ID0gX3VzZVJhbmdlQWN0aXZlMls3XSxcbiAgICBoYXNBY3RpdmVTdWJtaXRWYWx1ZSA9IF91c2VSYW5nZUFjdGl2ZTJbOF07XG4gIHZhciBvblNoYXJlZEZvY3VzID0gZnVuY3Rpb24gb25TaGFyZWRGb2N1cyhldmVudCwgaW5kZXgpIHtcbiAgICB0cmlnZ2VyRm9jdXModHJ1ZSk7XG4gICAgb25Gb2N1cyA9PT0gbnVsbCB8fCBvbkZvY3VzID09PSB2b2lkIDAgfHwgb25Gb2N1cyhldmVudCwge1xuICAgICAgcmFuZ2U6IGdldEFjdGl2ZVJhbmdlKGluZGV4ICE9PSBudWxsICYmIGluZGV4ICE9PSB2b2lkIDAgPyBpbmRleCA6IGFjdGl2ZUluZGV4KVxuICAgIH0pO1xuICB9O1xuICB2YXIgb25TaGFyZWRCbHVyID0gZnVuY3Rpb24gb25TaGFyZWRCbHVyKGV2ZW50LCBpbmRleCkge1xuICAgIHRyaWdnZXJGb2N1cyhmYWxzZSk7XG4gICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwIHx8IG9uQmx1cihldmVudCwge1xuICAgICAgcmFuZ2U6IGdldEFjdGl2ZVJhbmdlKGluZGV4ICE9PSBudWxsICYmIGluZGV4ICE9PSB2b2lkIDAgPyBpbmRleCA6IGFjdGl2ZUluZGV4KVxuICAgIH0pO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IFNob3dUaW1lID09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKiBVc2VkIGZvciBQb3B1cCBwYW5lbCAqL1xuICB2YXIgbWVyZ2VkU2hvd1RpbWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXNob3dUaW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGRpc2FibGVkVGltZSA9IHNob3dUaW1lLmRpc2FibGVkVGltZTtcbiAgICB2YXIgcHJveHlEaXNhYmxlZFRpbWUgPSBkaXNhYmxlZFRpbWUgPyBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgdmFyIHJhbmdlID0gZ2V0QWN0aXZlUmFuZ2UoYWN0aXZlSW5kZXgpO1xuICAgICAgdmFyIGZyb21EYXRlID0gZ2V0RnJvbURhdGUoY2FsZW5kYXJWYWx1ZSwgYWN0aXZlSW5kZXhMaXN0LCBhY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm4gZGlzYWJsZWRUaW1lKGRhdGUsIHJhbmdlLCB7XG4gICAgICAgIGZyb206IGZyb21EYXRlXG4gICAgICB9KTtcbiAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHNob3dUaW1lKSwge30sIHtcbiAgICAgIGRpc2FibGVkVGltZTogcHJveHlEaXNhYmxlZFRpbWVcbiAgICB9KTtcbiAgfSwgW3Nob3dUaW1lLCBhY3RpdmVJbmRleCwgY2FsZW5kYXJWYWx1ZSwgYWN0aXZlSW5kZXhMaXN0XSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBNb2RlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VNZXJnZWRTdGF0ZSA9IHVzZU1lcmdlZFN0YXRlKFtwaWNrZXIsIHBpY2tlcl0sIHtcbiAgICAgIHZhbHVlOiBtb2RlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbW9kZXMgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldE1vZGVzID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcbiAgdmFyIG1lcmdlZE1vZGUgPSBtb2Rlc1thY3RpdmVJbmRleF0gfHwgcGlja2VyO1xuXG4gIC8qKiBFeHRlbmRzIGZyb20gYG1lcmdlZE1vZGVgIHRvIHBhdGNoIGBkYXRldGltZWAgbW9kZSAqL1xuICB2YXIgaW50ZXJuYWxNb2RlID0gbWVyZ2VkTW9kZSA9PT0gJ2RhdGUnICYmIG1lcmdlZFNob3dUaW1lID8gJ2RhdGV0aW1lJyA6IG1lcmdlZE1vZGU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBQYW5lbENvdW50ID09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG11bHRpcGxlUGFuZWwgPSBpbnRlcm5hbE1vZGUgPT09IHBpY2tlciAmJiBpbnRlcm5hbE1vZGUgIT09ICd0aW1lJztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBTaG93IE5vdyA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkU2hvd05vdyA9IHVzZVNob3dOb3cocGlja2VyLCBtZXJnZWRNb2RlLCBzaG93Tm93LCBzaG93VG9kYXksIHRydWUpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlUmFuZ2VWYWx1ZSA9IHVzZVJhbmdlVmFsdWUoZmlsbGVkUHJvcHMsIG1lcmdlZFZhbHVlLCBzZXRJbm5lclZhbHVlLCBnZXRDYWxlbmRhclZhbHVlLCB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UsIGRpc2FibGVkLCBmb3JtYXRMaXN0LCBmb2N1c2VkLCBtZXJnZWRPcGVuLCBpc0ludmFsaWRhdGVEYXRlKSxcbiAgICBfdXNlUmFuZ2VWYWx1ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlUmFuZ2VWYWx1ZSwgMiksXG4gICAgLyoqIFRyaWdnZXIgYG9uQ2hhbmdlYCBieSBjaGVjayBgZGlzYWJsZWREYXRlYCAqL1xuICAgIGZsdXNoU3VibWl0ID0gX3VzZVJhbmdlVmFsdWUyWzBdLFxuICAgIC8qKiBUcmlnZ2VyIGBvbkNoYW5nZWAgZGlyZWN0bHkgd2l0aG91dCBjaGVjayBgZGlzYWJsZWREYXRlYCAqL1xuICAgIHRyaWdnZXJTdWJtaXRDaGFuZ2UgPSBfdXNlUmFuZ2VWYWx1ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09IERpc2FibGVkRGF0ZSA9PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZERpc2FibGVkRGF0ZSA9IHVzZVJhbmdlRGlzYWJsZWREYXRlKGNhbGVuZGFyVmFsdWUsIGRpc2FibGVkLCBhY3RpdmVJbmRleExpc3QsIGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIGRpc2FibGVkRGF0ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gVmFsaWRhdGUgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VGaWVsZHNJbnZhbGlkYXRlID0gdXNlRmllbGRzSW52YWxpZGF0ZShjYWxlbmRhclZhbHVlLCBpc0ludmFsaWRhdGVEYXRlLCBhbGxvd0VtcHR5KSxcbiAgICBfdXNlRmllbGRzSW52YWxpZGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlRmllbGRzSW52YWxpZGF0ZSwgMiksXG4gICAgc3VibWl0SW52YWxpZGF0ZXMgPSBfdXNlRmllbGRzSW52YWxpZGF0ZTJbMF0sXG4gICAgb25TZWxlY3RvckludmFsaWQgPSBfdXNlRmllbGRzSW52YWxpZGF0ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09IFBpY2tlciBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VSYW5nZVBpY2tlclZhbHVlID0gdXNlUmFuZ2VQaWNrZXJWYWx1ZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBjYWxlbmRhclZhbHVlLCBtb2RlcywgbWVyZ2VkT3BlbiwgYWN0aXZlSW5kZXgsIGludGVybmFsUGlja2VyLCBtdWx0aXBsZVBhbmVsLCBkZWZhdWx0UGlja2VyVmFsdWUsIHBpY2tlclZhbHVlLCBtZXJnZWRTaG93VGltZSA9PT0gbnVsbCB8fCBtZXJnZWRTaG93VGltZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVyZ2VkU2hvd1RpbWUuZGVmYXVsdE9wZW5WYWx1ZSwgb25QaWNrZXJWYWx1ZUNoYW5nZSwgbWluRGF0ZSwgbWF4RGF0ZSksXG4gICAgX3VzZVJhbmdlUGlja2VyVmFsdWUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVJhbmdlUGlja2VyVmFsdWUsIDIpLFxuICAgIGN1cnJlbnRQaWNrZXJWYWx1ZSA9IF91c2VSYW5nZVBpY2tlclZhbHVlMlswXSxcbiAgICBzZXRDdXJyZW50UGlja2VyVmFsdWUgPSBfdXNlUmFuZ2VQaWNrZXJWYWx1ZTJbMV07XG5cbiAgLy8gPj4+IE1vZGUgbmVlZCB3YWl0IGZvciBgcGlja2VyVmFsdWVgXG4gIHZhciB0cmlnZ2VyTW9kZUNoYW5nZSA9IHVzZUV2ZW50KGZ1bmN0aW9uIChuZXh0UGlja2VyVmFsdWUsIG5leHRNb2RlLCB0cmlnZ2VyRXZlbnQpIHtcbiAgICB2YXIgY2xvbmUgPSBmaWxsSW5kZXgobW9kZXMsIGFjdGl2ZUluZGV4LCBuZXh0TW9kZSk7XG4gICAgaWYgKGNsb25lWzBdICE9PSBtb2Rlc1swXSB8fCBjbG9uZVsxXSAhPT0gbW9kZXNbMV0pIHtcbiAgICAgIHNldE1vZGVzKGNsb25lKTtcbiAgICB9XG5cbiAgICAvLyBDb21wYXRpYmxlIHdpdGggYG9uUGFuZWxDaGFuZ2VgXG4gICAgaWYgKG9uUGFuZWxDaGFuZ2UgJiYgdHJpZ2dlckV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIGNsb25lUGlja2VyVmFsdWUgPSBfdG9Db25zdW1hYmxlQXJyYXkoY2FsZW5kYXJWYWx1ZSk7XG4gICAgICBpZiAobmV4dFBpY2tlclZhbHVlKSB7XG4gICAgICAgIGNsb25lUGlja2VyVmFsdWVbYWN0aXZlSW5kZXhdID0gbmV4dFBpY2tlclZhbHVlO1xuICAgICAgfVxuICAgICAgb25QYW5lbENoYW5nZShjbG9uZVBpY2tlclZhbHVlLCBjbG9uZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2hhbmdlID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZmlsbENhbGVuZGFyVmFsdWUgPSBmdW5jdGlvbiBmaWxsQ2FsZW5kYXJWYWx1ZShkYXRlLCBpbmRleCkge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBvbmx5IHdoZW4gZGF0ZSBjaGFuZ2VkXG4gICAgICBmaWxsSW5kZXgoY2FsZW5kYXJWYWx1ZSwgaW5kZXgsIGRhdGUpXG4gICAgKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gU3VibWl0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogVHJpZ2dlciBieSBjb25maXJtIG9wZXJhdGlvbi5cbiAgICogVGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBoYW5kbGUgdGhlIGBuZWVkQ29uZmlybWAgY2hlY2sgbG9naWMuXG4gICAqIC0gU2VsZWN0b3I6IGVudGVyIGtleVxuICAgKiAtIFBhbmVsOiBPSyBidXR0b25cbiAgICovXG4gIHZhciB0cmlnZ2VyUGFydENvbmZpcm0gPSBmdW5jdGlvbiB0cmlnZ2VyUGFydENvbmZpcm0oZGF0ZSwgc2tpcEZvY3VzKSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IGNhbGVuZGFyVmFsdWU7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIG5leHRWYWx1ZSA9IGZpbGxDYWxlbmRhclZhbHVlKGRhdGUsIGFjdGl2ZUluZGV4KTtcbiAgICB9XG4gICAgdXBkYXRlU3VibWl0SW5kZXgoYWN0aXZlSW5kZXgpO1xuICAgIC8vIEdldCBuZXh0IGZvY3VzIGluZGV4XG4gICAgdmFyIG5leHRJbmRleCA9IG5leHRBY3RpdmVJbmRleChuZXh0VmFsdWUpO1xuXG4gICAgLy8gQ2hhbmdlIGNhbGVuZGFyIHZhbHVlIGFuZCB0ZWxsIGZsdXNoIGl0XG4gICAgdHJpZ2dlckNhbGVuZGFyQ2hhbmdlKG5leHRWYWx1ZSk7XG4gICAgZmx1c2hTdWJtaXQoYWN0aXZlSW5kZXgsIG5leHRJbmRleCA9PT0gbnVsbCk7XG4gICAgaWYgKG5leHRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgdHJpZ2dlck9wZW4oZmFsc2UsIHtcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXNraXBGb2N1cykge1xuICAgICAgc2VsZWN0b3JSZWYuY3VycmVudC5mb2N1cyh7XG4gICAgICAgIGluZGV4OiBuZXh0SW5kZXhcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2xpY2sgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25TZWxlY3RvckNsaWNrID0gZnVuY3Rpb24gb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgdmFyIF9hY3RpdmVFbGVtZW50O1xuICAgIHZhciByb290Tm9kZSA9IGV2ZW50LnRhcmdldC5nZXRSb290Tm9kZSgpO1xuICAgIGlmICghc2VsZWN0b3JSZWYuY3VycmVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKChfYWN0aXZlRWxlbWVudCA9IHJvb3ROb2RlLmFjdGl2ZUVsZW1lbnQpICE9PSBudWxsICYmIF9hY3RpdmVFbGVtZW50ICE9PSB2b2lkIDAgPyBfYWN0aXZlRWxlbWVudCA6IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAvLyBDbGljayB0byBmb2N1cyB0aGUgZW5hYmxlZCBpbnB1dFxuICAgICAgdmFyIGVuYWJsZWRJbmRleCA9IGRpc2FibGVkLmZpbmRJbmRleChmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gIWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChlbmFibGVkSW5kZXggPj0gMCkge1xuICAgICAgICBzZWxlY3RvclJlZi5jdXJyZW50LmZvY3VzKHtcbiAgICAgICAgICBpbmRleDogZW5hYmxlZEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0cmlnZ2VyT3Blbih0cnVlKTtcbiAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCB8fCBvbkNsaWNrKGV2ZW50KTtcbiAgfTtcbiAgdmFyIG9uU2VsZWN0b3JDbGVhciA9IGZ1bmN0aW9uIG9uU2VsZWN0b3JDbGVhcigpIHtcbiAgICB0cmlnZ2VyU3VibWl0Q2hhbmdlKG51bGwpO1xuICAgIHRyaWdnZXJPcGVuKGZhbHNlLCB7XG4gICAgICBmb3JjZTogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBIb3ZlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShudWxsKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBob3ZlclNvdXJjZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0SG92ZXJTb3VyY2UgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKG51bGwpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBpbnRlcm5hbEhvdmVyVmFsdWVzID0gX1JlYWN0JHVzZVN0YXRlNFswXSxcbiAgICBzZXRJbnRlcm5hbEhvdmVyVmFsdWVzID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIGhvdmVyVmFsdWVzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGludGVybmFsSG92ZXJWYWx1ZXMgfHwgY2FsZW5kYXJWYWx1ZTtcbiAgfSwgW2NhbGVuZGFyVmFsdWUsIGludGVybmFsSG92ZXJWYWx1ZXNdKTtcblxuICAvLyBDbGVhbiB1cCBgaW50ZXJuYWxIb3ZlclZhbHVlc2Agd2hlbiBjbG9zZWRcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW1lcmdlZE9wZW4pIHtcbiAgICAgIHNldEludGVybmFsSG92ZXJWYWx1ZXMobnVsbCk7XG4gICAgfVxuICB9LCBbbWVyZ2VkT3Blbl0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09ICAgICAgICAgICAgICAgICAgICAgICBQYW5lbHMgICAgICAgICAgICAgICAgICAgICAgID09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNhdmUgdGhlIG9mZnNldCB3aXRoIGFjdGl2ZSBiYXIgcG9zaXRpb25cbiAgLy8gY29uc3QgW2FjdGl2ZU9mZnNldCwgc2V0QWN0aXZlT2Zmc2V0XSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNSA9IFJlYWN0LnVzZVN0YXRlKFswLCAwLCAwXSksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIGFjdGl2ZUluZm8gPSBfUmVhY3QkdXNlU3RhdGU2WzBdLFxuICAgIHNldEFjdGl2ZUluZm8gPSBfUmVhY3QkdXNlU3RhdGU2WzFdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IFByZXNldHMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBwcmVzZXRMaXN0ID0gdXNlUHJlc2V0cyhwcmVzZXRzLCByYW5nZXMpO1xuICB2YXIgb25QcmVzZXRIb3ZlciA9IGZ1bmN0aW9uIG9uUHJlc2V0SG92ZXIobmV4dFZhbHVlcykge1xuICAgIHNldEludGVybmFsSG92ZXJWYWx1ZXMobmV4dFZhbHVlcyk7XG4gICAgc2V0SG92ZXJTb3VyY2UoJ3ByZXNldCcpO1xuICB9O1xuICB2YXIgb25QcmVzZXRTdWJtaXQgPSBmdW5jdGlvbiBvblByZXNldFN1Ym1pdChuZXh0VmFsdWVzKSB7XG4gICAgdmFyIHBhc3NlZCA9IHRyaWdnZXJTdWJtaXRDaGFuZ2UobmV4dFZhbHVlcyk7XG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgdHJpZ2dlck9wZW4oZmFsc2UsIHtcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9uTm93ID0gZnVuY3Rpb24gb25Ob3cobm93KSB7XG4gICAgdHJpZ2dlclBhcnRDb25maXJtKG5vdyk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFBhbmVsID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uUGFuZWxIb3ZlciA9IGZ1bmN0aW9uIG9uUGFuZWxIb3ZlcihkYXRlKSB7XG4gICAgc2V0SW50ZXJuYWxIb3ZlclZhbHVlcyhkYXRlID8gZmlsbENhbGVuZGFyVmFsdWUoZGF0ZSwgYWN0aXZlSW5kZXgpIDogbnVsbCk7XG4gICAgc2V0SG92ZXJTb3VyY2UoJ2NlbGwnKTtcbiAgfTtcblxuICAvLyA+Pj4gRm9jdXNcbiAgdmFyIG9uUGFuZWxGb2N1cyA9IGZ1bmN0aW9uIG9uUGFuZWxGb2N1cyhldmVudCkge1xuICAgIHRyaWdnZXJPcGVuKHRydWUpO1xuICAgIG9uU2hhcmVkRm9jdXMoZXZlbnQpO1xuICB9O1xuXG4gIC8vID4+PiBNb3VzZURvd25cbiAgdmFyIG9uUGFuZWxNb3VzZURvd24gPSBmdW5jdGlvbiBvblBhbmVsTW91c2VEb3duKCkge1xuICAgIGxhc3RPcGVyYXRpb24oJ3BhbmVsJyk7XG4gIH07XG5cbiAgLy8gPj4+IENhbGVuZGFyXG4gIHZhciBvblBhbmVsU2VsZWN0ID0gZnVuY3Rpb24gb25QYW5lbFNlbGVjdChkYXRlKSB7XG4gICAgdmFyIGNsb25lID0gZmlsbEluZGV4KGNhbGVuZGFyVmFsdWUsIGFjdGl2ZUluZGV4LCBkYXRlKTtcblxuICAgIC8vIE9ubHkgdHJpZ2dlciBjYWxlbmRhciBldmVudCBidXQgbm90IHVwZGF0ZSBpbnRlcm5hbCBgY2FsZW5kYXJWYWx1ZWAgc3RhdGVcbiAgICB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UoY2xvbmUpO1xuXG4gICAgLy8gPj4+IFRyaWdnZXIgbmV4dCBhY3RpdmUgaWYgIW5lZWRDb25maXJtXG4gICAgLy8gRnVsbHkgbG9naWMgY2hlY2sgYHVzZVJhbmdlVmFsdWVgIGhvb2tcbiAgICBpZiAoIW5lZWRDb25maXJtICYmICFjb21wbGV4UGlja2VyICYmIGludGVybmFsUGlja2VyID09PSBpbnRlcm5hbE1vZGUpIHtcbiAgICAgIHRyaWdnZXJQYXJ0Q29uZmlybShkYXRlKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPj4+IENsb3NlXG4gIHZhciBvblBvcHVwQ2xvc2UgPSBmdW5jdGlvbiBvblBvcHVwQ2xvc2UoKSB7XG4gICAgLy8gQ2xvc2UgcG9wdXBcbiAgICB0cmlnZ2VyT3BlbihmYWxzZSk7XG4gIH07XG5cbiAgLy8gPj4+IGNlbGxSZW5kZXJcbiAgdmFyIG9uSW50ZXJuYWxDZWxsUmVuZGVyID0gdXNlQ2VsbFJlbmRlcihjZWxsUmVuZGVyLCBkYXRlUmVuZGVyLCBtb250aENlbGxSZW5kZXIsIGdldEFjdGl2ZVJhbmdlKGFjdGl2ZUluZGV4KSk7XG5cbiAgLy8gPj4+IFZhbHVlXG4gIHZhciBwYW5lbFZhbHVlID0gY2FsZW5kYXJWYWx1ZVthY3RpdmVJbmRleF0gfHwgbnVsbDtcblxuICAvLyA+Pj4gaW52YWxpZFxuICB2YXIgaXNQb3B1cEludmFsaWRhdGVEYXRlID0gdXNlRXZlbnQoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICByZXR1cm4gaXNJbnZhbGlkYXRlRGF0ZShkYXRlLCB7XG4gICAgICBhY3RpdmVJbmRleDogYWN0aXZlSW5kZXhcbiAgICB9KTtcbiAgfSk7XG4gIHZhciBwYW5lbFByb3BzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRvbVByb3BzID0gcGlja0F0dHJzKGZpbGxlZFByb3BzLCBmYWxzZSk7XG4gICAgdmFyIHJlc3RQcm9wcyA9IG9taXQoZmlsbGVkUHJvcHMsIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMoZG9tUHJvcHMpKSwgWydvbkNoYW5nZScsICdvbkNhbGVuZGFyQ2hhbmdlJywgJ3N0eWxlJywgJ2NsYXNzTmFtZScsICdvblBhbmVsQ2hhbmdlJywgJ2Rpc2FibGVkVGltZSddKSk7XG4gICAgcmV0dXJuIHJlc3RQcm9wcztcbiAgfSwgW2ZpbGxlZFByb3BzXSk7XG5cbiAgLy8gPj4+IFJlbmRlclxuICB2YXIgcGFuZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cCwgX2V4dGVuZHMoe30sIHBhbmVsUHJvcHMsIHtcbiAgICBzaG93Tm93OiBtZXJnZWRTaG93Tm93LFxuICAgIHNob3dUaW1lOiBtZXJnZWRTaG93VGltZVxuICAgIC8vIFJhbmdlXG4gICAgLFxuICAgIHJhbmdlOiB0cnVlLFxuICAgIG11bHRpcGxlUGFuZWw6IG11bHRpcGxlUGFuZWwsXG4gICAgYWN0aXZlSW5mbzogYWN0aXZlSW5mb1xuICAgIC8vIERpc2FibGVkXG4gICAgLFxuICAgIGRpc2FibGVkRGF0ZTogbWVyZ2VkRGlzYWJsZWREYXRlXG4gICAgLy8gRm9jdXNcbiAgICAsXG4gICAgb25Gb2N1czogb25QYW5lbEZvY3VzLFxuICAgIG9uQmx1cjogb25TaGFyZWRCbHVyLFxuICAgIG9uUGFuZWxNb3VzZURvd246IG9uUGFuZWxNb3VzZURvd25cbiAgICAvLyBNb2RlXG4gICAgLFxuICAgIHBpY2tlcjogcGlja2VyLFxuICAgIG1vZGU6IG1lcmdlZE1vZGUsXG4gICAgaW50ZXJuYWxNb2RlOiBpbnRlcm5hbE1vZGUsXG4gICAgb25QYW5lbENoYW5nZTogdHJpZ2dlck1vZGVDaGFuZ2VcbiAgICAvLyBWYWx1ZVxuICAgICxcbiAgICBmb3JtYXQ6IG1hc2tGb3JtYXQsXG4gICAgdmFsdWU6IHBhbmVsVmFsdWUsXG4gICAgaXNJbnZhbGlkOiBpc1BvcHVwSW52YWxpZGF0ZURhdGUsXG4gICAgb25DaGFuZ2U6IG51bGwsXG4gICAgb25TZWxlY3Q6IG9uUGFuZWxTZWxlY3RcbiAgICAvLyBQaWNrZXJWYWx1ZVxuICAgICxcbiAgICBwaWNrZXJWYWx1ZTogY3VycmVudFBpY2tlclZhbHVlLFxuICAgIGRlZmF1bHRPcGVuVmFsdWU6IHRvQXJyYXkoc2hvd1RpbWUgPT09IG51bGwgfHwgc2hvd1RpbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNob3dUaW1lLmRlZmF1bHRPcGVuVmFsdWUpW2FjdGl2ZUluZGV4XSxcbiAgICBvblBpY2tlclZhbHVlQ2hhbmdlOiBzZXRDdXJyZW50UGlja2VyVmFsdWVcbiAgICAvLyBIb3ZlclxuICAgICxcbiAgICBob3ZlclZhbHVlOiBob3ZlclZhbHVlcyxcbiAgICBvbkhvdmVyOiBvblBhbmVsSG92ZXJcbiAgICAvLyBTdWJtaXRcbiAgICAsXG4gICAgbmVlZENvbmZpcm06IG5lZWRDb25maXJtLFxuICAgIG9uU3VibWl0OiB0cmlnZ2VyUGFydENvbmZpcm0sXG4gICAgb25PazogdHJpZ2dlck9rXG4gICAgLy8gUHJlc2V0XG4gICAgLFxuICAgIHByZXNldHM6IHByZXNldExpc3QsXG4gICAgb25QcmVzZXRIb3Zlcjogb25QcmVzZXRIb3ZlcixcbiAgICBvblByZXNldFN1Ym1pdDogb25QcmVzZXRTdWJtaXRcbiAgICAvLyBOb3dcbiAgICAsXG4gICAgb25Ob3c6IG9uTm93XG4gICAgLy8gUmVuZGVyXG4gICAgLFxuICAgIGNlbGxSZW5kZXI6IG9uSW50ZXJuYWxDZWxsUmVuZGVyXG4gIH0pKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PSAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgICAgICAgICAgICAgICAgICA9PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvblNlbGVjdG9yQ2hhbmdlID0gZnVuY3Rpb24gb25TZWxlY3RvckNoYW5nZShkYXRlLCBpbmRleCkge1xuICAgIHZhciBjbG9uZSA9IGZpbGxDYWxlbmRhclZhbHVlKGRhdGUsIGluZGV4KTtcbiAgICB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UoY2xvbmUpO1xuICB9O1xuICB2YXIgb25TZWxlY3RvcklucHV0Q2hhbmdlID0gZnVuY3Rpb24gb25TZWxlY3RvcklucHV0Q2hhbmdlKCkge1xuICAgIGxhc3RPcGVyYXRpb24oJ2lucHV0Jyk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gU2VsZWN0b3IgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uU2VsZWN0b3JGb2N1cyA9IGZ1bmN0aW9uIG9uU2VsZWN0b3JGb2N1cyhldmVudCwgaW5kZXgpIHtcbiAgICAvLyBDaGVjayBpZiBgbmVlZENvbmZpcm1gIGJ1dCB1c2VyIG5vdCBzdWJtaXQgeWV0XG4gICAgdmFyIGFjdGl2ZUxpc3RMZW4gPSBhY3RpdmVJbmRleExpc3QubGVuZ3RoO1xuICAgIHZhciBsYXN0QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleExpc3RbYWN0aXZlTGlzdExlbiAtIDFdO1xuICAgIGlmIChhY3RpdmVMaXN0TGVuICYmIGxhc3RBY3RpdmVJbmRleCAhPT0gaW5kZXggJiYgbmVlZENvbmZpcm0gJiZcbiAgICAvLyBOb3QgY2hhbmdlIGluZGV4IGlmIGlzIG5vdCBmaWxsZWRcbiAgICAhYWxsb3dFbXB0eVtsYXN0QWN0aXZlSW5kZXhdICYmICFoYXNBY3RpdmVTdWJtaXRWYWx1ZShsYXN0QWN0aXZlSW5kZXgpICYmIGNhbGVuZGFyVmFsdWVbbGFzdEFjdGl2ZUluZGV4XSkge1xuICAgICAgc2VsZWN0b3JSZWYuY3VycmVudC5mb2N1cyh7XG4gICAgICAgIGluZGV4OiBsYXN0QWN0aXZlSW5kZXhcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0T3BlcmF0aW9uKCdpbnB1dCcpO1xuICAgIHRyaWdnZXJPcGVuKHRydWUsIHtcbiAgICAgIGluaGVyaXQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIFdoZW4gY2xpY2sgaW5wdXQgdG8gc3dpdGNoIHRoZSBmaWVsZCwgaXQgd2lsbCBub3QgdHJpZ2dlciBjbG9zZS5cbiAgICAvLyBXaGljaCBtZWFucyBpdCB3aWxsIGxvc2UgdGhlIHBhcnQgY29uZmlybSBhbmQgd2UgbmVlZCBmaWxsIGJhY2suXG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80OTUxMlxuICAgIGlmIChhY3RpdmVJbmRleCAhPT0gaW5kZXggJiYgbWVyZ2VkT3BlbiAmJiAhbmVlZENvbmZpcm0gJiYgY29tcGxleFBpY2tlcikge1xuICAgICAgdHJpZ2dlclBhcnRDb25maXJtKG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBzZXRBY3RpdmVJbmRleChpbmRleCk7XG4gICAgb25TaGFyZWRGb2N1cyhldmVudCwgaW5kZXgpO1xuICB9O1xuICB2YXIgb25TZWxlY3RvckJsdXIgPSBmdW5jdGlvbiBvblNlbGVjdG9yQmx1cihldmVudCwgaW5kZXgpIHtcbiAgICB0cmlnZ2VyT3BlbihmYWxzZSk7XG4gICAgaWYgKCFuZWVkQ29uZmlybSAmJiBsYXN0T3BlcmF0aW9uKCkgPT09ICdpbnB1dCcpIHtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBuZXh0QWN0aXZlSW5kZXgoY2FsZW5kYXJWYWx1ZSk7XG4gICAgICBmbHVzaFN1Ym1pdChhY3RpdmVJbmRleCwgbmV4dEluZGV4ID09PSBudWxsKTtcbiAgICB9XG4gICAgb25TaGFyZWRCbHVyKGV2ZW50LCBpbmRleCk7XG4gIH07XG4gIHZhciBvblNlbGVjdG9yS2V5RG93biA9IGZ1bmN0aW9uIG9uU2VsZWN0b3JLZXlEb3duKGV2ZW50LCBwcmV2ZW50RGVmYXVsdCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICB0cmlnZ2VyUGFydENvbmZpcm0obnVsbCwgdHJ1ZSk7XG4gICAgfVxuICAgIG9uS2V5RG93biA9PT0gbnVsbCB8fCBvbktleURvd24gPT09IHZvaWQgMCB8fCBvbktleURvd24oZXZlbnQsIHByZXZlbnREZWZhdWx0KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBDb250ZXh0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnLFxuICAgICAgYnV0dG9uOiBjb21wb25lbnRzLmJ1dHRvbixcbiAgICAgIGlucHV0OiBjb21wb25lbnRzLmlucHV0XG4gICAgfTtcbiAgfSwgW3ByZWZpeENscywgbG9jYWxlLCBnZW5lcmF0ZUNvbmZpZywgY29tcG9uZW50cy5idXR0b24sIGNvbXBvbmVudHMuaW5wdXRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4gTW9kZVxuICAvLyBSZXNldCBmb3IgZXZlcnkgYWN0aXZlXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1lcmdlZE9wZW4gJiYgYWN0aXZlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTGVnYWN5IGNvbXBhdGlibGUuIFRoaXMgZWZmZWN0IHVwZGF0ZSBzaG91bGQgbm90IHRyaWdnZXIgYG9uUGFuZWxDaGFuZ2VgXG4gICAgICB0cmlnZ2VyTW9kZUNoYW5nZShudWxsLCBwaWNrZXIsIGZhbHNlKTtcbiAgICB9XG4gIH0sIFttZXJnZWRPcGVuLCBhY3RpdmVJbmRleCwgcGlja2VyXSk7XG5cbiAgLy8gPj4+IEZvciBjb21wbGV4IHBpY2tlciwgd2UgbmVlZCBjaGVjayBpZiBuZWVkIHRvIGZvY3VzIG5leHQgb25lXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxhc3RPcCA9IGxhc3RPcGVyYXRpb24oKTtcblxuICAgIC8vIFRyYWRlIGFzIGNvbmZpcm0gb24gZmllbGQgbGVhdmVcbiAgICBpZiAoIW1lcmdlZE9wZW4gJiYgbGFzdE9wID09PSAnaW5wdXQnKSB7XG4gICAgICB0cmlnZ2VyT3BlbihmYWxzZSk7XG4gICAgICB0cmlnZ2VyUGFydENvbmZpcm0obnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gU3VibWl0IHdpdGggY29tcGxleCBwaWNrZXJcbiAgICBpZiAoIW1lcmdlZE9wZW4gJiYgY29tcGxleFBpY2tlciAmJiAhbmVlZENvbmZpcm0gJiYgbGFzdE9wID09PSAncGFuZWwnKSB7XG4gICAgICB0cmlnZ2VyT3Blbih0cnVlKTtcbiAgICAgIHRyaWdnZXJQYXJ0Q29uZmlybSgpO1xuICAgIH1cbiAgfSwgW21lcmdlZE9wZW5dKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IERldldhcm5pbmcgPT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBpc0luZGV4RW1wdHkgPSBmdW5jdGlvbiBpc0luZGV4RW1wdHkoaW5kZXgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIFZhbHVlIGlzIGVtcHR5XG4gICAgICAgICEodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZVtpbmRleF0pICYmXG4gICAgICAgIC8vIERlZmF1bHRWYWx1ZSBpcyBlbXB0eVxuICAgICAgICAhKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCAmJiBkZWZhdWx0VmFsdWVbaW5kZXhdKVxuICAgICAgKTtcbiAgICB9O1xuICAgIGlmIChkaXNhYmxlZC5zb21lKGZ1bmN0aW9uIChmaWVsZERpc2FibGVkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGZpZWxkRGlzYWJsZWQgJiYgaXNJbmRleEVtcHR5KGluZGV4KSAmJiAhYWxsb3dFbXB0eVtpbmRleF07XG4gICAgfSkpIHtcbiAgICAgIHdhcm5pbmcoZmFsc2UsICdgZGlzYWJsZWRgIHNob3VsZCBub3Qgc2V0IHdpdGggZW1wdHkgYHZhbHVlYC4gWW91IHNob3VsZCBzZXQgYGFsbG93RW1wdHlgIG9yIGB2YWx1ZWAgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGlja2VyQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBpY2tlclRyaWdnZXIsIF9leHRlbmRzKHt9LCBwaWNrVHJpZ2dlclByb3BzKGZpbGxlZFByb3BzKSwge1xuICAgIHBvcHVwRWxlbWVudDogcGFuZWwsXG4gICAgcG9wdXBTdHlsZTogc3R5bGVzLnBvcHVwLFxuICAgIHBvcHVwQ2xhc3NOYW1lOiBjbGFzc05hbWVzLnBvcHVwXG4gICAgLy8gVmlzaWJsZVxuICAgICxcbiAgICB2aXNpYmxlOiBtZXJnZWRPcGVuLFxuICAgIG9uQ2xvc2U6IG9uUG9wdXBDbG9zZVxuICAgIC8vIFJhbmdlXG4gICAgLFxuICAgIHJhbmdlOiB0cnVlXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSYW5nZVNlbGVjdG9yXG4gIC8vIFNoYXJlZFxuICAsIF9leHRlbmRzKHt9LCBmaWxsZWRQcm9wcywge1xuICAgIC8vIFJlZlxuICAgIHJlZjogc2VsZWN0b3JSZWZcbiAgICAvLyBJY29uXG4gICAgLFxuICAgIHN1ZmZpeEljb246IHN1ZmZpeEljb25cbiAgICAvLyBBY3RpdmVcbiAgICAsXG4gICAgYWN0aXZlSW5kZXg6IGZvY3VzZWQgfHwgbWVyZ2VkT3BlbiA/IGFjdGl2ZUluZGV4IDogbnVsbCxcbiAgICBhY3RpdmVIZWxwOiAhIWludGVybmFsSG92ZXJWYWx1ZXMsXG4gICAgYWxsSGVscDogISFpbnRlcm5hbEhvdmVyVmFsdWVzICYmIGhvdmVyU291cmNlID09PSAncHJlc2V0JyxcbiAgICBmb2N1c2VkOiBmb2N1c2VkLFxuICAgIG9uRm9jdXM6IG9uU2VsZWN0b3JGb2N1cyxcbiAgICBvbkJsdXI6IG9uU2VsZWN0b3JCbHVyLFxuICAgIG9uS2V5RG93bjogb25TZWxlY3RvcktleURvd24sXG4gICAgb25TdWJtaXQ6IHRyaWdnZXJQYXJ0Q29uZmlybVxuICAgIC8vIENoYW5nZVxuICAgICxcbiAgICB2YWx1ZTogaG92ZXJWYWx1ZXMsXG4gICAgbWFza0Zvcm1hdDogbWFza0Zvcm1hdCxcbiAgICBvbkNoYW5nZTogb25TZWxlY3RvckNoYW5nZSxcbiAgICBvbklucHV0Q2hhbmdlOiBvblNlbGVjdG9ySW5wdXRDaGFuZ2VcbiAgICAvLyBGb3JtYXRcbiAgICAsXG4gICAgZm9ybWF0OiBmb3JtYXRMaXN0LFxuICAgIGlucHV0UmVhZE9ubHk6IGlucHV0UmVhZE9ubHlcbiAgICAvLyBEaXNhYmxlZFxuICAgICxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAvLyBPcGVuXG4gICAgLFxuICAgIG9wZW46IG1lcmdlZE9wZW4sXG4gICAgb25PcGVuQ2hhbmdlOiB0cmlnZ2VyT3BlblxuICAgIC8vIENsaWNrXG4gICAgLFxuICAgIG9uQ2xpY2s6IG9uU2VsZWN0b3JDbGljayxcbiAgICBvbkNsZWFyOiBvblNlbGVjdG9yQ2xlYXJcbiAgICAvLyBJbnZhbGlkXG4gICAgLFxuICAgIGludmFsaWQ6IHN1Ym1pdEludmFsaWRhdGVzLFxuICAgIG9uSW52YWxpZDogb25TZWxlY3RvckludmFsaWRcbiAgICAvLyBPZmZzZXRcbiAgICAsXG4gICAgb25BY3RpdmVJbmZvOiBzZXRBY3RpdmVJbmZvXG4gIH0pKSkpO1xufVxudmFyIFJlZlJhbmdlUGlja2VyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoUmFuZ2VQaWNrZXIpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVmUmFuZ2VQaWNrZXIuZGlzcGxheU5hbWUgPSAnUmVmUmFuZ2VQaWNrZXInO1xufVxuZXhwb3J0IGRlZmF1bHQgUmVmUmFuZ2VQaWNrZXI7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xudmFyIF9leGNsdWRlZCA9IFtcImljb25cIiwgXCJ0eXBlXCJdLFxuICBfZXhjbHVkZWQyID0gW1wib25DbGVhclwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQaWNrZXJDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJY29uKHByb3BzKSB7XG4gIHZhciBpY29uID0gcHJvcHMuaWNvbixcbiAgICB0eXBlID0gcHJvcHMudHlwZSxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VyQ29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICByZXR1cm4gaWNvbiA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQodHlwZSlcbiAgfSwgcmVzdFByb3BzKSwgaWNvbikgOiBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIENsZWFySWNvbihfcmVmKSB7XG4gIHZhciBvbkNsZWFyID0gX3JlZi5vbkNsZWFyLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQyKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIF9leHRlbmRzKHt9LCByZXN0UHJvcHMsIHtcbiAgICB0eXBlOiBcImNsZWFyXCIsXG4gICAgcm9sZTogXCJidXR0b25cIixcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0sXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb25DbGVhcigpO1xuICAgIH1cbiAgfSkpO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJhY3RpdmVcIiwgXCJzaG93QWN0aXZlQ2xzXCIsIFwic3VmZml4SWNvblwiLCBcImZvcm1hdFwiLCBcInZhbGlkYXRlRm9ybWF0XCIsIFwib25DaGFuZ2VcIiwgXCJvbklucHV0XCIsIFwiaGVscGVkXCIsIFwib25IZWxwXCIsIFwib25TdWJtaXRcIiwgXCJvbktleURvd25cIiwgXCJwcmVzZXJ2ZUludmFsaWRPbkJsdXJcIiwgXCJpbnZhbGlkXCIsIFwiY2xlYXJJY29uXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdmVudCB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCByYWYgZnJvbSBcInJjLXV0aWwvZXMvcmFmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBsZWZ0UGFkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL21pc2NVdGlsXCI7XG5pbXBvcnQgUGlja2VyQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IHVzZUxvY2tFZmZlY3QgZnJvbSBcIi4uL2hvb2tzL3VzZUxvY2tFZmZlY3RcIjtcbmltcG9ydCBJY29uIGZyb20gXCIuL0ljb25cIjtcbmltcG9ydCBNYXNrRm9ybWF0IGZyb20gXCIuL01hc2tGb3JtYXRcIjtcbmltcG9ydCB7IGdldE1hc2tSYW5nZSB9IGZyb20gXCIuL3V0aWxcIjtcblxuLy8gRm9ybWF0IGxvZ2ljXG4vL1xuLy8gRmlyc3QgdGltZSBvbiBmb2N1czpcbi8vICAxLiBjaGVjayBpZiB0aGUgdGV4dCBpcyB2YWxpZCwgaWYgbm90IGZpbGwgd2l0aCBmb3JtYXRcbi8vICAyLiBzZXQgaGlnaGxpZ2h0IGNlbGwgdG8gdGhlIGZpcnN0IGNlbGxcbi8vIENlbGxzXG4vLyAgMS4gU2VsZWN0aW9uIHRoZSBpbmRleCBjZWxsLCBzZXQgaW5uZXIgYGNhY2hlVmFsdWVgIHRvICcnXG4vLyAgMi4gS2V5IGlucHV0IGZpbHRlciBub24tbnVtYmVyIGNoYXIsIHBhdGNoIGFmdGVyIHRoZSBgY2FjaGVWYWx1ZWBcbi8vICAgIDEuIFJlcGxhY2UgdGhlIGBjYWNoZVZhbHVlYCB3aXRoIGlucHV0IGFsaWduIHRoZSBjZWxsIGxlbmd0aFxuLy8gICAgMi4gUmUtc2VsZWN0aW9uIHRoZSBtYXNrIGNlbGxcbi8vICAzLiBJZiBgY2FjaGVWYWx1ZWAgbWF0Y2ggdGhlIGxpbWl0IGxlbmd0aCBvciBjZWxsIGZvcm1hdCAobGlrZSAxIH4gMTIgbW9udGgpLCBnbyB0byBuZXh0IGNlbGxcblxudmFyIElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIGFjdGl2ZSA9IHByb3BzLmFjdGl2ZSxcbiAgICBfcHJvcHMkc2hvd0FjdGl2ZUNscyA9IHByb3BzLnNob3dBY3RpdmVDbHMsXG4gICAgc2hvd0FjdGl2ZUNscyA9IF9wcm9wcyRzaG93QWN0aXZlQ2xzID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJHNob3dBY3RpdmVDbHMsXG4gICAgc3VmZml4SWNvbiA9IHByb3BzLnN1ZmZpeEljb24sXG4gICAgZm9ybWF0ID0gcHJvcHMuZm9ybWF0LFxuICAgIHZhbGlkYXRlRm9ybWF0ID0gcHJvcHMudmFsaWRhdGVGb3JtYXQsXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbklucHV0ID0gcHJvcHMub25JbnB1dCxcbiAgICBoZWxwZWQgPSBwcm9wcy5oZWxwZWQsXG4gICAgb25IZWxwID0gcHJvcHMub25IZWxwLFxuICAgIG9uU3VibWl0ID0gcHJvcHMub25TdWJtaXQsXG4gICAgb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duLFxuICAgIF9wcm9wcyRwcmVzZXJ2ZUludmFsaSA9IHByb3BzLnByZXNlcnZlSW52YWxpZE9uQmx1cixcbiAgICBwcmVzZXJ2ZUludmFsaWRPbkJsdXIgPSBfcHJvcHMkcHJlc2VydmVJbnZhbGkgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHByZXNlcnZlSW52YWxpLFxuICAgIGludmFsaWQgPSBwcm9wcy5pbnZhbGlkLFxuICAgIGNsZWFySWNvbiA9IHByb3BzLmNsZWFySWNvbixcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICBvbk1vdXNlVXAgPSBwcm9wcy5vbk1vdXNlVXA7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VyQ29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzLFxuICAgIF9SZWFjdCR1c2VDb250ZXh0JGlucCA9IF9SZWFjdCR1c2VDb250ZXh0LmlucHV0LFxuICAgIENvbXBvbmVudCA9IF9SZWFjdCR1c2VDb250ZXh0JGlucCA9PT0gdm9pZCAwID8gJ2lucHV0JyA6IF9SZWFjdCR1c2VDb250ZXh0JGlucDtcbiAgdmFyIGlucHV0UHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pbnB1dFwiKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGZvY3VzZWQgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEZvY3VzZWQgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKHZhbHVlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgaW50ZXJuYWxJbnB1dFZhbHVlID0gX1JlYWN0JHVzZVN0YXRlNFswXSxcbiAgICBzZXRJbnB1dFZhbHVlID0gX1JlYWN0JHVzZVN0YXRlNFsxXTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTUgPSBSZWFjdC51c2VTdGF0ZSgnJyksXG4gICAgX1JlYWN0JHVzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZTUsIDIpLFxuICAgIGZvY3VzQ2VsbFRleHQgPSBfUmVhY3QkdXNlU3RhdGU2WzBdLFxuICAgIHNldEZvY3VzQ2VsbFRleHQgPSBfUmVhY3QkdXNlU3RhdGU2WzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlNyA9IFJlYWN0LnVzZVN0YXRlKG51bGwpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGU3LCAyKSxcbiAgICBmb2N1c0NlbGxJbmRleCA9IF9SZWFjdCR1c2VTdGF0ZThbMF0sXG4gICAgc2V0Rm9jdXNDZWxsSW5kZXggPSBfUmVhY3QkdXNlU3RhdGU4WzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlOSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlOSwgMiksXG4gICAgZm9yY2VTZWxlY3Rpb25TeW5jTWFyayA9IF9SZWFjdCR1c2VTdGF0ZTEwWzBdLFxuICAgIGZvcmNlU2VsZWN0aW9uU3luYyA9IF9SZWFjdCR1c2VTdGF0ZTEwWzFdO1xuICB2YXIgaW5wdXRWYWx1ZSA9IGludGVybmFsSW5wdXRWYWx1ZSB8fCAnJztcblxuICAvLyBTeW5jIHZhbHVlIGlmIG5lZWRlZFxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldElucHV0VmFsdWUodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaG9sZGVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYXRpdmVFbGVtZW50OiBob2xkZXJSZWYuY3VycmVudCxcbiAgICAgIGlucHV0RWxlbWVudDogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cyhvcHRpb25zKSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMob3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEZvcm1hdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1hc2tGb3JtYXQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE1hc2tGb3JtYXQoZm9ybWF0IHx8ICcnKTtcbiAgfSwgW2Zvcm1hdF0pO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8gPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChoZWxwZWQpIHtcbiAgICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXNrRm9ybWF0LmdldFNlbGVjdGlvbihmb2N1c0NlbGxJbmRleCk7XG4gICAgfSwgW21hc2tGb3JtYXQsIGZvY3VzQ2VsbEluZGV4LCBoZWxwZWRdKSxcbiAgICBfUmVhY3QkdXNlTWVtbzIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlTWVtbywgMiksXG4gICAgc2VsZWN0aW9uU3RhcnQgPSBfUmVhY3QkdXNlTWVtbzJbMF0sXG4gICAgc2VsZWN0aW9uRW5kID0gX1JlYWN0JHVzZU1lbW8yWzFdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBNb2RpZnkgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFdoZW4gaW5wdXQgbW9kaWZ5IGNvbnRlbnQsIHRyaWdnZXIgYG9uSGVscGAgaWYgaXMgbm90IHRoZSBmb3JtYXRcbiAgdmFyIG9uTW9kaWZ5ID0gZnVuY3Rpb24gb25Nb2RpZnkodGV4dCkge1xuICAgIGlmICh0ZXh0ICYmIHRleHQgIT09IGZvcm1hdCAmJiB0ZXh0ICE9PSB2YWx1ZSkge1xuICAgICAgb25IZWxwKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgYnkgcGFzdGUsIGtleURvd24gYW5kIGZvY3VzIHRvIHNob3cgZm9ybWF0XG4gICAqL1xuICB2YXIgdHJpZ2dlcklucHV0Q2hhbmdlID0gdXNlRXZlbnQoZnVuY3Rpb24gKHRleHQpIHtcbiAgICBpZiAodmFsaWRhdGVGb3JtYXQodGV4dCkpIHtcbiAgICAgIG9uQ2hhbmdlKHRleHQpO1xuICAgIH1cbiAgICBzZXRJbnB1dFZhbHVlKHRleHQpO1xuICAgIG9uTW9kaWZ5KHRleHQpO1xuICB9KTtcblxuICAvLyBEaXJlY3RseSB0cmlnZ2VyIGBvbkNoYW5nZWAgaWYgYGZvcm1hdGAgaXMgZW1wdHlcbiAgdmFyIG9uSW50ZXJuYWxDaGFuZ2UgPSBmdW5jdGlvbiBvbkludGVybmFsQ2hhbmdlKGV2ZW50KSB7XG4gICAgLy8gSGFjayBgb25DaGFuZ2VgIHdpdGggZm9ybWF0IHRvIGRvIG5vdGhpbmdcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgdmFyIHRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBvbk1vZGlmeSh0ZXh0KTtcbiAgICAgIHNldElucHV0VmFsdWUodGV4dCk7XG4gICAgICBvbkNoYW5nZSh0ZXh0KTtcbiAgICB9XG4gIH07XG4gIHZhciBvbkZvcm1hdFBhc3RlID0gZnVuY3Rpb24gb25Gb3JtYXRQYXN0ZShldmVudCkge1xuICAgIC8vIEdldCBwYXN0ZSB0ZXh0XG4gICAgdmFyIHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuICAgIGlmICh2YWxpZGF0ZUZvcm1hdChwYXN0ZVRleHQpKSB7XG4gICAgICB0cmlnZ2VySW5wdXRDaGFuZ2UocGFzdGVUZXh0KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IE1vdXNlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gV2hlbiBgbW91c2VEb3duYCBnZXQgZm9jdXMsIGl0J3MgYmV0dGVyIHRvIG5vdCB0byBjaGFuZ2UgdGhlIHNlbGVjdGlvblxuICAvLyBTaW5jZSB0aGUgdXAgcG9zaXRpb24gbWF5YmUgbm90IGlzIHRoZSBmaXJzdCBjZWxsXG4gIHZhciBtb3VzZURvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgb25Gb3JtYXRNb3VzZURvd24gPSBmdW5jdGlvbiBvbkZvcm1hdE1vdXNlRG93bigpIHtcbiAgICBtb3VzZURvd25SZWYuY3VycmVudCA9IHRydWU7XG4gIH07XG4gIHZhciBvbkZvcm1hdE1vdXNlVXAgPSBmdW5jdGlvbiBvbkZvcm1hdE1vdXNlVXAoZXZlbnQpIHtcbiAgICB2YXIgX3JlZiA9IGV2ZW50LnRhcmdldCxcbiAgICAgIHN0YXJ0ID0gX3JlZi5zZWxlY3Rpb25TdGFydDtcbiAgICB2YXIgY2xvc2VNYXNrSW5kZXggPSBtYXNrRm9ybWF0LmdldE1hc2tDZWxsSW5kZXgoc3RhcnQpO1xuICAgIHNldEZvY3VzQ2VsbEluZGV4KGNsb3NlTWFza0luZGV4KTtcblxuICAgIC8vIEZvcmNlIHVwZGF0ZSB0aGUgc2VsZWN0aW9uXG4gICAgZm9yY2VTZWxlY3Rpb25TeW5jKHt9KTtcbiAgICBvbk1vdXNlVXAgPT09IG51bGwgfHwgb25Nb3VzZVVwID09PSB2b2lkIDAgfHwgb25Nb3VzZVVwKGV2ZW50KTtcbiAgICBtb3VzZURvd25SZWYuY3VycmVudCA9IGZhbHNlO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gRm9jdXMgQmx1ciA9PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkZvcm1hdEZvY3VzID0gZnVuY3Rpb24gb25Gb3JtYXRGb2N1cyhldmVudCkge1xuICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgc2V0Rm9jdXNDZWxsSW5kZXgoMCk7XG4gICAgc2V0Rm9jdXNDZWxsVGV4dCgnJyk7XG4gICAgb25Gb2N1cyhldmVudCk7XG4gIH07XG4gIHZhciBvblNoYXJlZEJsdXIgPSBmdW5jdGlvbiBvblNoYXJlZEJsdXIoZXZlbnQpIHtcbiAgICBvbkJsdXIoZXZlbnQpO1xuICB9O1xuICB2YXIgb25Gb3JtYXRCbHVyID0gZnVuY3Rpb24gb25Gb3JtYXRCbHVyKGV2ZW50KSB7XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgb25TaGFyZWRCbHVyKGV2ZW50KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDaGVjayBpZiBibHVyIG5lZWQgcmVzZXQgaW5wdXQgdmFsdWVcbiAgdXNlTG9ja0VmZmVjdChhY3RpdmUsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWFjdGl2ZSAmJiAhcHJlc2VydmVJbnZhbGlkT25CbHVyKSB7XG4gICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IEtleWJvYXJkID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvblNoYXJlZEtleURvd24gPSBmdW5jdGlvbiBvblNoYXJlZEtleURvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIHZhbGlkYXRlRm9ybWF0KGlucHV0VmFsdWUpKSB7XG4gICAgICBvblN1Ym1pdCgpO1xuICAgIH1cbiAgICBvbktleURvd24gPT09IG51bGwgfHwgb25LZXlEb3duID09PSB2b2lkIDAgfHwgb25LZXlEb3duKGV2ZW50KTtcbiAgfTtcbiAgdmFyIG9uRm9ybWF0S2V5RG93biA9IGZ1bmN0aW9uIG9uRm9ybWF0S2V5RG93bihldmVudCkge1xuICAgIG9uU2hhcmVkS2V5RG93bihldmVudCk7XG4gICAgdmFyIGtleSA9IGV2ZW50LmtleTtcblxuICAgIC8vIFNhdmUgdGhlIGNhY2hlIHdpdGggY2VsbCB0ZXh0XG4gICAgdmFyIG5leHRDZWxsVGV4dCA9IG51bGw7XG5cbiAgICAvLyBGaWxsIGluIHRoZSBpbnB1dFxuICAgIHZhciBuZXh0RmlsbFRleHQgPSBudWxsO1xuICAgIHZhciBtYXNrQ2VsbExlbiA9IHNlbGVjdGlvbkVuZCAtIHNlbGVjdGlvblN0YXJ0O1xuICAgIHZhciBjZWxsRm9ybWF0ID0gZm9ybWF0LnNsaWNlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuXG4gICAgLy8gQ2VsbCBJbmRleFxuICAgIHZhciBvZmZzZXRDZWxsSW5kZXggPSBmdW5jdGlvbiBvZmZzZXRDZWxsSW5kZXgob2Zmc2V0KSB7XG4gICAgICBzZXRGb2N1c0NlbGxJbmRleChmdW5jdGlvbiAoaWR4KSB7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBpZHggKyBvZmZzZXQ7XG4gICAgICAgIG5leHRJbmRleCA9IE1hdGgubWF4KG5leHRJbmRleCwgMCk7XG4gICAgICAgIG5leHRJbmRleCA9IE1hdGgubWluKG5leHRJbmRleCwgbWFza0Zvcm1hdC5zaXplKCkgLSAxKTtcbiAgICAgICAgcmV0dXJuIG5leHRJbmRleDtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBSYW5nZVxuICAgIHZhciBvZmZzZXRDZWxsVmFsdWUgPSBmdW5jdGlvbiBvZmZzZXRDZWxsVmFsdWUob2Zmc2V0KSB7XG4gICAgICB2YXIgX2dldE1hc2tSYW5nZSA9IGdldE1hc2tSYW5nZShjZWxsRm9ybWF0KSxcbiAgICAgICAgX2dldE1hc2tSYW5nZTIgPSBfc2xpY2VkVG9BcnJheShfZ2V0TWFza1JhbmdlLCAzKSxcbiAgICAgICAgcmFuZ2VTdGFydCA9IF9nZXRNYXNrUmFuZ2UyWzBdLFxuICAgICAgICByYW5nZUVuZCA9IF9nZXRNYXNrUmFuZ2UyWzFdLFxuICAgICAgICByYW5nZURlZmF1bHQgPSBfZ2V0TWFza1JhbmdlMlsyXTtcbiAgICAgIHZhciBjdXJyZW50VGV4dCA9IGlucHV0VmFsdWUuc2xpY2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgICB2YXIgY3VycmVudFRleHROdW0gPSBOdW1iZXIoY3VycmVudFRleHQpO1xuICAgICAgaWYgKGlzTmFOKGN1cnJlbnRUZXh0TnVtKSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHJhbmdlRGVmYXVsdCA/IHJhbmdlRGVmYXVsdCA6IG9mZnNldCA+IDAgPyByYW5nZVN0YXJ0IDogcmFuZ2VFbmQpO1xuICAgICAgfVxuICAgICAgdmFyIG51bSA9IGN1cnJlbnRUZXh0TnVtICsgb2Zmc2V0O1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VFbmQgLSByYW5nZVN0YXJ0ICsgMTtcbiAgICAgIHJldHVybiBTdHJpbmcocmFuZ2VTdGFydCArIChyYW5nZSArIG51bSAtIHJhbmdlU3RhcnQpICUgcmFuZ2UpO1xuICAgIH07XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIC8vID09PT09PT09PT09PT09PSBSZW1vdmUgPT09PT09PT09PT09PT09XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgICAgbmV4dENlbGxUZXh0ID0gJyc7XG4gICAgICAgIG5leHRGaWxsVGV4dCA9IGNlbGxGb3JtYXQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyA9PT09PT09PT09PT09PT0gQXJyb3dzID09PT09PT09PT09PT09PVxuICAgICAgLy8gTGVmdCBrZXlcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIG5leHRDZWxsVGV4dCA9ICcnO1xuICAgICAgICBvZmZzZXRDZWxsSW5kZXgoLTEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gUmlnaHQga2V5XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgbmV4dENlbGxUZXh0ID0gJyc7XG4gICAgICAgIG9mZnNldENlbGxJbmRleCgxKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIFVwIGtleVxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIG5leHRDZWxsVGV4dCA9ICcnO1xuICAgICAgICBuZXh0RmlsbFRleHQgPSBvZmZzZXRDZWxsVmFsdWUoMSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBEb3duIGtleVxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgbmV4dENlbGxUZXh0ID0gJyc7XG4gICAgICAgIG5leHRGaWxsVGV4dCA9IG9mZnNldENlbGxWYWx1ZSgtMSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyA9PT09PT09PT09PT09PT0gTnVtYmVyID09PT09PT09PT09PT09PVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKCFpc05hTihOdW1iZXIoa2V5KSkpIHtcbiAgICAgICAgICBuZXh0Q2VsbFRleHQgPSBmb2N1c0NlbGxUZXh0ICsga2V5O1xuICAgICAgICAgIG5leHRGaWxsVGV4dCA9IG5leHRDZWxsVGV4dDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY2VsbCB0ZXh0XG4gICAgaWYgKG5leHRDZWxsVGV4dCAhPT0gbnVsbCkge1xuICAgICAgc2V0Rm9jdXNDZWxsVGV4dChuZXh0Q2VsbFRleHQpO1xuICAgICAgaWYgKG5leHRDZWxsVGV4dC5sZW5ndGggPj0gbWFza0NlbGxMZW4pIHtcbiAgICAgICAgLy8gR28gdG8gbmV4dCBjZWxsXG4gICAgICAgIG9mZnNldENlbGxJbmRleCgxKTtcbiAgICAgICAgc2V0Rm9jdXNDZWxsVGV4dCgnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBpbnB1dCB0ZXh0XG4gICAgaWYgKG5leHRGaWxsVGV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gUmVwbGFjZSBzZWxlY3Rpb24gcmFuZ2Ugd2l0aCBgbmV4dENlbGxUZXh0YFxuICAgICAgdmFyIG5leHRGb2N1c1ZhbHVlID1cbiAgICAgIC8vIGJlZm9yZVxuICAgICAgaW5wdXRWYWx1ZS5zbGljZSgwLCBzZWxlY3Rpb25TdGFydCkgK1xuICAgICAgLy8gcmVwbGFjZVxuICAgICAgbGVmdFBhZChuZXh0RmlsbFRleHQsIG1hc2tDZWxsTGVuKSArXG4gICAgICAvLyBhZnRlclxuICAgICAgaW5wdXRWYWx1ZS5zbGljZShzZWxlY3Rpb25FbmQpO1xuICAgICAgdHJpZ2dlcklucHV0Q2hhbmdlKG5leHRGb2N1c1ZhbHVlLnNsaWNlKDAsIGZvcm1hdC5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgdHJpZ2dlciBzZWxlY3Rpb24gc3luYyBhZnRlciBrZXkgZG93blxuICAgIGZvcmNlU2VsZWN0aW9uU3luYyh7fSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEZvcm1hdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJhZlJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZm9jdXNlZCB8fCAhZm9ybWF0IHx8IG1vdXNlRG93blJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgd2l0aCBmb3JtYXQgaWYgbm90IG1hdGNoXG4gICAgaWYgKCFtYXNrRm9ybWF0Lm1hdGNoKGlucHV0VmFsdWUpKSB7XG4gICAgICB0cmlnZ2VySW5wdXRDaGFuZ2UoZm9ybWF0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNYXRjaCB0aGUgc2VsZWN0aW9uIHJhbmdlXG4gICAgaW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcblxuICAgIC8vIENocm9tZSBoYXMgdGhlIGJ1ZyBhbmNob3IgcG9zaXRpb24gbG9va3Mgbm90IGNvcnJlY3QgYnV0IGFjdHVhbGx5IGNvcnJlY3RcbiAgICByYWZSZWYuY3VycmVudCA9IHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByYWYuY2FuY2VsKHJhZlJlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbbWFza0Zvcm1hdCwgZm9ybWF0LCBmb2N1c2VkLCBpbnB1dFZhbHVlLCBmb2N1c0NlbGxJbmRleCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgZm9yY2VTZWxlY3Rpb25TeW5jTWFyaywgdHJpZ2dlcklucHV0Q2hhbmdlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSW5wdXQgcHJvcHMgZm9yIGZvcm1hdFxuICB2YXIgaW5wdXRQcm9wcyA9IGZvcm1hdCA/IHtcbiAgICBvbkZvY3VzOiBvbkZvcm1hdEZvY3VzLFxuICAgIG9uQmx1cjogb25Gb3JtYXRCbHVyLFxuICAgIG9uS2V5RG93bjogb25Gb3JtYXRLZXlEb3duLFxuICAgIG9uTW91c2VEb3duOiBvbkZvcm1hdE1vdXNlRG93bixcbiAgICBvbk1vdXNlVXA6IG9uRm9ybWF0TW91c2VVcCxcbiAgICBvblBhc3RlOiBvbkZvcm1hdFBhc3RlXG4gIH0gOiB7fTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IGhvbGRlclJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoaW5wdXRQcmVmaXhDbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGlucHV0UHJlZml4Q2xzLCBcIi1hY3RpdmVcIiksIGFjdGl2ZSAmJiBzaG93QWN0aXZlQ2xzKSwgXCJcIi5jb25jYXQoaW5wdXRQcmVmaXhDbHMsIFwiLXBsYWNlaG9sZGVyXCIpLCBoZWxwZWQpKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICByZWY6IGlucHV0UmVmLFxuICAgIFwiYXJpYS1pbnZhbGlkXCI6IGludmFsaWQsXG4gICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIG9uS2V5RG93bjogb25TaGFyZWRLZXlEb3duLFxuICAgIG9uQmx1cjogb25TaGFyZWRCbHVyXG4gICAgLy8gUmVwbGFjZSB3aXRoIGZvcm1hdFxuICB9LCBpbnB1dFByb3BzLCB7XG4gICAgLy8gVmFsdWVcbiAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICBvbkNoYW5nZTogb25JbnRlcm5hbENoYW5nZVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICB0eXBlOiBcInN1ZmZpeFwiLFxuICAgIGljb246IHN1ZmZpeEljb25cbiAgfSksIGNsZWFySWNvbik7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIElucHV0LmRpc3BsYXlOYW1lID0gJ0lucHV0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbnZhciBGT1JNQVRfS0VZUyA9IFsnWVlZWScsICdNTScsICdERCcsICdISCcsICdtbScsICdzcycsICdTU1MnXTtcbi8vIFVzZSBDaGluZXNlIGNoYXJhY3RlciB0byBhdm9pZCBjb25mbGljdCB3aXRoIHRoZSBtYXNrIGZvcm1hdFxudmFyIFJFUExBQ0VfS0VZID0gJ+mhpyc7XG52YXIgTWFza0Zvcm1hdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1hc2tGb3JtYXQoZm9ybWF0KSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1hc2tGb3JtYXQpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZvcm1hdFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1hc2tGb3JtYXRcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjZWxsc1wiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1hc2tDZWxsc1wiLCB2b2lkIDApO1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXG4gICAgLy8gR2VuZXJhdGUgbWFzayBmb3JtYXRcbiAgICB2YXIgcmVwbGFjZUtleXMgPSBGT1JNQVRfS0VZUy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIFwiKFwiLmNvbmNhdChrZXksIFwiKVwiKTtcbiAgICB9KS5qb2luKCd8Jyk7XG4gICAgdmFyIHJlcGxhY2VSZWcgPSBuZXcgUmVnRXhwKHJlcGxhY2VLZXlzLCAnZycpO1xuICAgIHRoaXMubWFza0Zvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKHJlcGxhY2VSZWcsXG4gICAgLy8gVXNlIENoaW5lc2UgY2hhcmFjdGVyIHRvIGF2b2lkIHVzZXIgdXNlIGl0IGluIGZvcm1hdFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBSRVBMQUNFX0tFWS5yZXBlYXQoa2V5Lmxlbmd0aCk7XG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBjZWxsc1xuICAgIHZhciBjZWxsUmVnID0gbmV3IFJlZ0V4cChcIihcIi5jb25jYXQoRk9STUFUX0tFWVMuam9pbignfCcpLCBcIilcIikpO1xuICAgIHZhciBzdHJDZWxscyA9IChmb3JtYXQuc3BsaXQoY2VsbFJlZykgfHwgW10pLmZpbHRlcihmdW5jdGlvbiAoc3RyKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0pO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHRoaXMuY2VsbHMgPSBzdHJDZWxscy5tYXAoZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIHZhciBtYXNrID0gRk9STUFUX0tFWVMuaW5jbHVkZXModGV4dCk7XG4gICAgICB2YXIgc3RhcnQgPSBvZmZzZXQ7XG4gICAgICB2YXIgZW5kID0gb2Zmc2V0ICsgdGV4dC5sZW5ndGg7XG4gICAgICBvZmZzZXQgPSBlbmQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICBtYXNrOiBtYXNrLFxuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gTWFzayBjZWxsc1xuICAgIHRoaXMubWFza0NlbGxzID0gdGhpcy5jZWxscy5maWx0ZXIoZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgIHJldHVybiBjZWxsLm1hc2s7XG4gICAgfSk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKE1hc2tGb3JtYXQsIFt7XG4gICAga2V5OiBcImdldFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTZWxlY3Rpb24obWFza0NlbGxJbmRleCkge1xuICAgICAgdmFyIF9yZWYgPSB0aGlzLm1hc2tDZWxsc1ttYXNrQ2VsbEluZGV4XSB8fCB7fSxcbiAgICAgICAgc3RhcnQgPSBfcmVmLnN0YXJ0LFxuICAgICAgICBlbmQgPSBfcmVmLmVuZDtcbiAgICAgIHJldHVybiBbc3RhcnQgfHwgMCwgZW5kIHx8IDBdO1xuICAgIH1cblxuICAgIC8qKiBDaGVjayBnaXZlbiB0ZXh0IG1hdGNoIGZvcm1hdCAqL1xuICB9LCB7XG4gICAga2V5OiBcIm1hdGNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hdGNoKHRleHQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXNrRm9ybWF0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBtYXNrQ2hhciA9IHRoaXMubWFza0Zvcm1hdFtpXTtcbiAgICAgICAgdmFyIHRleHRDaGFyID0gdGV4dFtpXTtcbiAgICAgICAgaWYgKCF0ZXh0Q2hhciB8fCBtYXNrQ2hhciAhPT0gUkVQTEFDRV9LRVkgJiYgbWFza0NoYXIgIT09IHRleHRDaGFyKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IG1hc2sgY2VsbCBjb3VudCAqL1xuICB9LCB7XG4gICAga2V5OiBcInNpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hc2tDZWxscy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE1hc2tDZWxsSW5kZXhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWFza0NlbGxJbmRleChhbmNob3JJbmRleCkge1xuICAgICAgdmFyIGNsb3NldERpc3QgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgIHZhciBjbG9zZXRJbmRleCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWFza0NlbGxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBfdGhpcyRtYXNrQ2VsbHMkaSA9IHRoaXMubWFza0NlbGxzW2ldLFxuICAgICAgICAgIHN0YXJ0ID0gX3RoaXMkbWFza0NlbGxzJGkuc3RhcnQsXG4gICAgICAgICAgZW5kID0gX3RoaXMkbWFza0NlbGxzJGkuZW5kO1xuICAgICAgICBpZiAoYW5jaG9ySW5kZXggPj0gc3RhcnQgJiYgYW5jaG9ySW5kZXggPD0gZW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRpc3QgPSBNYXRoLm1pbihNYXRoLmFicyhhbmNob3JJbmRleCAtIHN0YXJ0KSwgTWF0aC5hYnMoYW5jaG9ySW5kZXggLSBlbmQpKTtcbiAgICAgICAgaWYgKGRpc3QgPCBjbG9zZXREaXN0KSB7XG4gICAgICAgICAgY2xvc2V0RGlzdCA9IGRpc3Q7XG4gICAgICAgICAgY2xvc2V0SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvc2V0SW5kZXg7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBNYXNrRm9ybWF0O1xufSgpO1xuZXhwb3J0IHsgTWFza0Zvcm1hdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInByZWZpeFwiLCBcImNsZWFySWNvblwiLCBcInN1ZmZpeEljb25cIiwgXCJzZXBhcmF0b3JcIiwgXCJhY3RpdmVJbmRleFwiLCBcImFjdGl2ZUhlbHBcIiwgXCJhbGxIZWxwXCIsIFwiZm9jdXNlZFwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIiwgXCJvbktleURvd25cIiwgXCJsb2NhbGVcIiwgXCJnZW5lcmF0ZUNvbmZpZ1wiLCBcInBsYWNlaG9sZGVyXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGVhclwiLCBcInZhbHVlXCIsIFwib25DaGFuZ2VcIiwgXCJvblN1Ym1pdFwiLCBcIm9uSW5wdXRDaGFuZ2VcIiwgXCJmb3JtYXRcIiwgXCJtYXNrRm9ybWF0XCIsIFwicHJlc2VydmVJbnZhbGlkT25CbHVyXCIsIFwib25JbnZhbGlkXCIsIFwiZGlzYWJsZWRcIiwgXCJpbnZhbGlkXCIsIFwiaW5wdXRSZWFkT25seVwiLCBcImRpcmVjdGlvblwiLCBcIm9uT3BlbkNoYW5nZVwiLCBcIm9uQWN0aXZlSW5mb1wiLCBcInBsYWNlbWVudFwiLCBcIm9uTW91c2VEb3duXCIsIFwicmVxdWlyZWRcIiwgXCJhcmlhLXJlcXVpcmVkXCIsIFwiYXV0b0ZvY3VzXCIsIFwidGFiSW5kZXhcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJpbmRleFwiXTtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlc2l6ZU9ic2VydmVyIGZyb20gJ3JjLXJlc2l6ZS1vYnNlcnZlcic7XG5pbXBvcnQgeyB1c2VFdmVudCB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBpY2tlckNvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCB1c2VJbnB1dFByb3BzIGZyb20gXCIuL2hvb2tzL3VzZUlucHV0UHJvcHNcIjtcbmltcG9ydCB1c2VSb290UHJvcHMgZnJvbSBcIi4vaG9va3MvdXNlUm9vdFByb3BzXCI7XG5pbXBvcnQgSWNvbiwgeyBDbGVhckljb24gfSBmcm9tIFwiLi9JY29uXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4vSW5wdXRcIjtcbmZ1bmN0aW9uIFJhbmdlU2VsZWN0b3IocHJvcHMsIHJlZikge1xuICB2YXIgaWQgPSBwcm9wcy5pZCxcbiAgICBwcmVmaXggPSBwcm9wcy5wcmVmaXgsXG4gICAgY2xlYXJJY29uID0gcHJvcHMuY2xlYXJJY29uLFxuICAgIHN1ZmZpeEljb24gPSBwcm9wcy5zdWZmaXhJY29uLFxuICAgIF9wcm9wcyRzZXBhcmF0b3IgPSBwcm9wcy5zZXBhcmF0b3IsXG4gICAgc2VwYXJhdG9yID0gX3Byb3BzJHNlcGFyYXRvciA9PT0gdm9pZCAwID8gJ34nIDogX3Byb3BzJHNlcGFyYXRvcixcbiAgICBhY3RpdmVJbmRleCA9IHByb3BzLmFjdGl2ZUluZGV4LFxuICAgIGFjdGl2ZUhlbHAgPSBwcm9wcy5hY3RpdmVIZWxwLFxuICAgIGFsbEhlbHAgPSBwcm9wcy5hbGxIZWxwLFxuICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICBvbktleURvd24gPSBwcm9wcy5vbktleURvd24sXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgcGxhY2Vob2xkZXIgPSBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbkNsZWFyID0gcHJvcHMub25DbGVhcixcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgb25TdWJtaXQgPSBwcm9wcy5vblN1Ym1pdCxcbiAgICBvbklucHV0Q2hhbmdlID0gcHJvcHMub25JbnB1dENoYW5nZSxcbiAgICBmb3JtYXQgPSBwcm9wcy5mb3JtYXQsXG4gICAgbWFza0Zvcm1hdCA9IHByb3BzLm1hc2tGb3JtYXQsXG4gICAgcHJlc2VydmVJbnZhbGlkT25CbHVyID0gcHJvcHMucHJlc2VydmVJbnZhbGlkT25CbHVyLFxuICAgIG9uSW52YWxpZCA9IHByb3BzLm9uSW52YWxpZCxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGludmFsaWQgPSBwcm9wcy5pbnZhbGlkLFxuICAgIGlucHV0UmVhZE9ubHkgPSBwcm9wcy5pbnB1dFJlYWRPbmx5LFxuICAgIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICBvbk9wZW5DaGFuZ2UgPSBwcm9wcy5vbk9wZW5DaGFuZ2UsXG4gICAgb25BY3RpdmVJbmZvID0gcHJvcHMub25BY3RpdmVJbmZvLFxuICAgIHBsYWNlbWVudCA9IHByb3BzLnBsYWNlbWVudCxcbiAgICBfb25Nb3VzZURvd24gPSBwcm9wcy5vbk1vdXNlRG93bixcbiAgICByZXF1aXJlZCA9IHByb3BzLnJlcXVpcmVkLFxuICAgIGFyaWFSZXF1aXJlZCA9IHByb3BzWydhcmlhLXJlcXVpcmVkJ10sXG4gICAgYXV0b0ZvY3VzID0gcHJvcHMuYXV0b0ZvY3VzLFxuICAgIHRhYkluZGV4ID0gcHJvcHMudGFiSW5kZXgsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgcnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUHJlZml4ID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFBpY2tlckNvbnRleHQpLFxuICAgIHByZWZpeENscyA9IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBJZCA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaWRzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbaWRdO1xuICAgIH1cbiAgICB2YXIgbWVyZ2VkSWQgPSBpZCB8fCB7fTtcbiAgICByZXR1cm4gW21lcmdlZElkLnN0YXJ0LCBtZXJnZWRJZC5lbmRdO1xuICB9LCBbaWRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcm9vdFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaW5wdXRTdGFydFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaW5wdXRFbmRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGdldElucHV0ID0gZnVuY3Rpb24gZ2V0SW5wdXQoaW5kZXgpIHtcbiAgICB2YXIgX2luZGV4O1xuICAgIHJldHVybiAoX2luZGV4ID0gW2lucHV0U3RhcnRSZWYsIGlucHV0RW5kUmVmXVtpbmRleF0pID09PSBudWxsIHx8IF9pbmRleCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2luZGV4LmN1cnJlbnQ7XG4gIH07XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IHJvb3RSZWYuY3VycmVudCxcbiAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cyhvcHRpb25zKSB7XG4gICAgICAgIGlmIChfdHlwZW9mKG9wdGlvbnMpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHZhciBfZ2V0SW5wdXQ7XG4gICAgICAgICAgdmFyIF9yZWYgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgICAgICAgX3JlZiRpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgICBfaW5kZXgyID0gX3JlZiRpbmRleCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkaW5kZXgsXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZDIpO1xuICAgICAgICAgIChfZ2V0SW5wdXQgPSBnZXRJbnB1dChfaW5kZXgyKSkgPT09IG51bGwgfHwgX2dldElucHV0ID09PSB2b2lkIDAgfHwgX2dldElucHV0LmZvY3VzKHJlc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfZ2V0SW5wdXQyO1xuICAgICAgICAgIChfZ2V0SW5wdXQyID0gZ2V0SW5wdXQob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogMCkpID09PSBudWxsIHx8IF9nZXRJbnB1dDIgPT09IHZvaWQgMCB8fCBfZ2V0SW5wdXQyLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX2dldElucHV0MywgX2dldElucHV0NDtcbiAgICAgICAgKF9nZXRJbnB1dDMgPSBnZXRJbnB1dCgwKSkgPT09IG51bGwgfHwgX2dldElucHV0MyA9PT0gdm9pZCAwIHx8IF9nZXRJbnB1dDMuYmx1cigpO1xuICAgICAgICAoX2dldElucHV0NCA9IGdldElucHV0KDEpKSA9PT0gbnVsbCB8fCBfZ2V0SW5wdXQ0ID09PSB2b2lkIDAgfHwgX2dldElucHV0NC5ibHVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFByb3BzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJvb3RQcm9wcyA9IHVzZVJvb3RQcm9wcyhyZXN0UHJvcHMpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBQbGFjZWhvbGRlciA9PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRQbGFjZWhvbGRlciA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBsYWNlaG9sZGVyKSA/IHBsYWNlaG9sZGVyIDogW3BsYWNlaG9sZGVyLCBwbGFjZWhvbGRlcl07XG4gIH0sIFtwbGFjZWhvbGRlcl0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBJbnB1dHMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlSW5wdXRQcm9wcyA9IHVzZUlucHV0UHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBpZDogaWRzLFxuICAgICAgcGxhY2Vob2xkZXI6IG1lcmdlZFBsYWNlaG9sZGVyXG4gICAgfSkpLFxuICAgIF91c2VJbnB1dFByb3BzMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbnB1dFByb3BzLCAxKSxcbiAgICBnZXRJbnB1dFByb3BzID0gX3VzZUlucHV0UHJvcHMyWzBdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlQmFyID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHdpZHRoOiAwXG4gICAgfSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgYWN0aXZlQmFyU3R5bGUgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEFjdGl2ZUJhclN0eWxlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIHN5bmNBY3RpdmVPZmZzZXQgPSB1c2VFdmVudChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0ID0gZ2V0SW5wdXQoYWN0aXZlSW5kZXgpO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgdmFyIGlucHV0UmVjdCA9IGlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgcGFyZW50UmVjdCA9IHJvb3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHZhciByZWN0T2Zmc2V0ID0gaW5wdXRSZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnQ7XG4gICAgICBzZXRBY3RpdmVCYXJTdHlsZShmdW5jdGlvbiAob3JpKSB7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9yaSksIHt9LCB7XG4gICAgICAgICAgd2lkdGg6IGlucHV0UmVjdC53aWR0aCxcbiAgICAgICAgICBsZWZ0OiByZWN0T2Zmc2V0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBvbkFjdGl2ZUluZm8oW2lucHV0UmVjdC5sZWZ0LCBpbnB1dFJlY3QucmlnaHQsIHBhcmVudFJlY3Qud2lkdGhdKTtcbiAgICB9XG4gIH0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHN5bmNBY3RpdmVPZmZzZXQoKTtcbiAgfSwgW2FjdGl2ZUluZGV4XSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsZWFyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHNob3dDbGVhciA9IGNsZWFySWNvbiAmJiAodmFsdWVbMF0gJiYgIWRpc2FibGVkWzBdIHx8IHZhbHVlWzFdICYmICFkaXNhYmxlZFsxXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gRGlzYWJsZWQgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHN0YXJ0QXV0b0ZvY3VzID0gYXV0b0ZvY3VzICYmICFkaXNhYmxlZFswXTtcbiAgdmFyIGVuZEF1dG9Gb2N1cyA9IGF1dG9Gb2N1cyAmJiAhc3RhcnRBdXRvRm9jdXMgJiYgIWRpc2FibGVkWzFdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXNpemVPYnNlcnZlciwge1xuICAgIG9uUmVzaXplOiBzeW5jQWN0aXZlT2Zmc2V0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJlZml4Q2xzLCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXJhbmdlXCIpLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZm9jdXNlZFwiKSwgZm9jdXNlZCksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkLmV2ZXJ5KGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9KSksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItaW52YWxpZFwiKSwgaW52YWxpZC5zb21lKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9KSksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcnRsXCIpLCBydGwpLCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBzdHlsZSxcbiAgICByZWY6IHJvb3RSZWYsXG4gICAgb25DbGljazogb25DbGlja1xuICAgIC8vIE5vdCBsb3NlIGN1cnJlbnQgaW5wdXQgZm9jdXNcbiAgICAsXG4gICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIGlmICh0YXJnZXQgIT09IGlucHV0U3RhcnRSZWYuY3VycmVudC5pbnB1dEVsZW1lbnQgJiYgdGFyZ2V0ICE9PSBpbnB1dEVuZFJlZi5jdXJyZW50LmlucHV0RWxlbWVudCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBfb25Nb3VzZURvd24gPT09IG51bGwgfHwgX29uTW91c2VEb3duID09PSB2b2lkIDAgfHwgX29uTW91c2VEb3duKGUpO1xuICAgIH1cbiAgfSksIHByZWZpeCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXByZWZpeFwiKVxuICB9LCBwcmVmaXgpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5wdXRTdGFydFJlZlxuICB9LCBnZXRJbnB1dFByb3BzKDApLCB7XG4gICAgYXV0b0ZvY3VzOiBzdGFydEF1dG9Gb2N1cyxcbiAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgXCJkYXRlLXJhbmdlXCI6IFwic3RhcnRcIlxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItcmFuZ2Utc2VwYXJhdG9yXCIpXG4gIH0sIHNlcGFyYXRvciksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBpbnB1dEVuZFJlZlxuICB9LCBnZXRJbnB1dFByb3BzKDEpLCB7XG4gICAgYXV0b0ZvY3VzOiBlbmRBdXRvRm9jdXMsXG4gICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgIFwiZGF0ZS1yYW5nZVwiOiBcImVuZFwiXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1hY3RpdmUtYmFyXCIpLFxuICAgIHN0eWxlOiBhY3RpdmVCYXJTdHlsZVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHR5cGU6IFwic3VmZml4XCIsXG4gICAgaWNvbjogc3VmZml4SWNvblxuICB9KSwgc2hvd0NsZWFyICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENsZWFySWNvbiwge1xuICAgIGljb246IGNsZWFySWNvbixcbiAgICBvbkNsZWFyOiBvbkNsZWFyXG4gIH0pKSk7XG59XG52YXIgUmVmUmFuZ2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKFJhbmdlU2VsZWN0b3IpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVmUmFuZ2VTZWxlY3Rvci5kaXNwbGF5TmFtZSA9ICdSYW5nZVNlbGVjdG9yJztcbn1cbmV4cG9ydCBkZWZhdWx0IFJlZlJhbmdlU2VsZWN0b3I7IiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgT3ZlcmZsb3cgZnJvbSAncmMtb3ZlcmZsb3cnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTXVsdGlwbGVEYXRlcyhwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgb25SZW1vdmUgPSBwcm9wcy5vblJlbW92ZSxcbiAgICBfcHJvcHMkcmVtb3ZlSWNvbiA9IHByb3BzLnJlbW92ZUljb24sXG4gICAgcmVtb3ZlSWNvbiA9IF9wcm9wcyRyZW1vdmVJY29uID09PSB2b2lkIDAgPyAnw5cnIDogX3Byb3BzJHJlbW92ZUljb24sXG4gICAgZm9ybWF0RGF0ZSA9IHByb3BzLmZvcm1hdERhdGUsXG4gICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCxcbiAgICBtYXhUYWdDb3VudCA9IHByb3BzLm1heFRhZ0NvdW50LFxuICAgIHBsYWNlaG9sZGVyID0gcHJvcHMucGxhY2Vob2xkZXI7XG4gIHZhciBzZWxlY3RvckNscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItc2VsZWN0b3JcIik7XG4gIHZhciBzZWxlY3Rpb25DbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXNlbGVjdGlvblwiKTtcbiAgdmFyIG92ZXJmbG93Q2xzID0gXCJcIi5jb25jYXQoc2VsZWN0aW9uQ2xzLCBcIi1vdmVyZmxvd1wiKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiByZW5kZXJTZWxlY3Rvcihjb250ZW50LCBvbkNsb3NlKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJcIi5jb25jYXQoc2VsZWN0aW9uQ2xzLCBcIi1pdGVtXCIpKSxcbiAgICAgIHRpdGxlOiB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgPyBjb250ZW50IDogbnVsbFxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHNlbGVjdGlvbkNscywgXCItaXRlbS1jb250ZW50XCIpXG4gICAgfSwgY29udGVudCksICFkaXNhYmxlZCAmJiBvbkNsb3NlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LFxuICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoc2VsZWN0aW9uQ2xzLCBcIi1pdGVtLXJlbW92ZVwiKVxuICAgIH0sIHJlbW92ZUljb24pKTtcbiAgfVxuICBmdW5jdGlvbiByZW5kZXJJdGVtKGRhdGUpIHtcbiAgICB2YXIgZGlzcGxheUxhYmVsID0gZm9ybWF0RGF0ZShkYXRlKTtcbiAgICB2YXIgb25DbG9zZSA9IGZ1bmN0aW9uIG9uQ2xvc2UoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBvblJlbW92ZShkYXRlKTtcbiAgICB9O1xuICAgIHJldHVybiByZW5kZXJTZWxlY3RvcihkaXNwbGF5TGFiZWwsIG9uQ2xvc2UpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZXN0ID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gcmVuZGVyUmVzdChvbWl0dGVkVmFsdWVzKSB7XG4gICAgdmFyIGNvbnRlbnQgPSBcIisgXCIuY29uY2F0KG9taXR0ZWRWYWx1ZXMubGVuZ3RoLCBcIiAuLi5cIik7XG4gICAgcmV0dXJuIHJlbmRlclNlbGVjdG9yKGNvbnRlbnQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogc2VsZWN0b3JDbHNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT3ZlcmZsb3csIHtcbiAgICBwcmVmaXhDbHM6IG92ZXJmbG93Q2xzLFxuICAgIGRhdGE6IHZhbHVlLFxuICAgIHJlbmRlckl0ZW06IHJlbmRlckl0ZW0sXG4gICAgcmVuZGVyUmVzdDogcmVuZGVyUmVzdFxuICAgIC8vIHN1ZmZpeD17aW5wdXROb2RlfVxuICAgICxcbiAgICBpdGVtS2V5OiBmdW5jdGlvbiBpdGVtS2V5KGRhdGUpIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKGRhdGUpO1xuICAgIH0sXG4gICAgbWF4Q291bnQ6IG1heFRhZ0NvdW50XG4gIH0pLCAhdmFsdWUubGVuZ3RoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXNlbGVjdGlvbi1wbGFjZWhvbGRlclwiKVxuICB9LCBwbGFjZWhvbGRlcikpO1xufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiaWRcIiwgXCJvcGVuXCIsIFwicHJlZml4XCIsIFwiY2xlYXJJY29uXCIsIFwic3VmZml4SWNvblwiLCBcImFjdGl2ZUhlbHBcIiwgXCJhbGxIZWxwXCIsIFwiZm9jdXNlZFwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIiwgXCJvbktleURvd25cIiwgXCJsb2NhbGVcIiwgXCJnZW5lcmF0ZUNvbmZpZ1wiLCBcInBsYWNlaG9sZGVyXCIsIFwiY2xhc3NOYW1lXCIsIFwic3R5bGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGVhclwiLCBcImludGVybmFsUGlja2VyXCIsIFwidmFsdWVcIiwgXCJvbkNoYW5nZVwiLCBcIm9uU3VibWl0XCIsIFwib25JbnB1dENoYW5nZVwiLCBcIm11bHRpcGxlXCIsIFwibWF4VGFnQ291bnRcIiwgXCJmb3JtYXRcIiwgXCJtYXNrRm9ybWF0XCIsIFwicHJlc2VydmVJbnZhbGlkT25CbHVyXCIsIFwib25JbnZhbGlkXCIsIFwiZGlzYWJsZWRcIiwgXCJpbnZhbGlkXCIsIFwiaW5wdXRSZWFkT25seVwiLCBcImRpcmVjdGlvblwiLCBcIm9uT3BlbkNoYW5nZVwiLCBcIm9uTW91c2VEb3duXCIsIFwicmVxdWlyZWRcIiwgXCJhcmlhLXJlcXVpcmVkXCIsIFwiYXV0b0ZvY3VzXCIsIFwidGFiSW5kZXhcIiwgXCJyZW1vdmVJY29uXCJdO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1NhbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCBQaWNrZXJDb250ZXh0IGZyb20gXCIuLi8uLi9jb250ZXh0XCI7XG5pbXBvcnQgSWNvbiwgeyBDbGVhckljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IElucHV0IGZyb20gXCIuLi9JbnB1dFwiO1xuaW1wb3J0IHVzZUlucHV0UHJvcHMgZnJvbSBcIi4uL2hvb2tzL3VzZUlucHV0UHJvcHNcIjtcbmltcG9ydCB1c2VSb290UHJvcHMgZnJvbSBcIi4uL2hvb2tzL3VzZVJvb3RQcm9wc1wiO1xuaW1wb3J0IE11bHRpcGxlRGF0ZXMgZnJvbSBcIi4vTXVsdGlwbGVEYXRlc1wiO1xuZnVuY3Rpb24gU2luZ2xlU2VsZWN0b3IocHJvcHMsIHJlZikge1xuICB2YXIgaWQgPSBwcm9wcy5pZCxcbiAgICBvcGVuID0gcHJvcHMub3BlbixcbiAgICBwcmVmaXggPSBwcm9wcy5wcmVmaXgsXG4gICAgY2xlYXJJY29uID0gcHJvcHMuY2xlYXJJY29uLFxuICAgIHN1ZmZpeEljb24gPSBwcm9wcy5zdWZmaXhJY29uLFxuICAgIGFjdGl2ZUhlbHAgPSBwcm9wcy5hY3RpdmVIZWxwLFxuICAgIGFsbEhlbHAgPSBwcm9wcy5hbGxIZWxwLFxuICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1ciA9IHByb3BzLm9uQmx1cixcbiAgICBvbktleURvd24gPSBwcm9wcy5vbktleURvd24sXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgcGxhY2Vob2xkZXIgPSBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICBvbkNsaWNrID0gcHJvcHMub25DbGljayxcbiAgICBvbkNsZWFyID0gcHJvcHMub25DbGVhcixcbiAgICBpbnRlcm5hbFBpY2tlciA9IHByb3BzLmludGVybmFsUGlja2VyLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBvblN1Ym1pdCA9IHByb3BzLm9uU3VibWl0LFxuICAgIG9uSW5wdXRDaGFuZ2UgPSBwcm9wcy5vbklucHV0Q2hhbmdlLFxuICAgIG11bHRpcGxlID0gcHJvcHMubXVsdGlwbGUsXG4gICAgbWF4VGFnQ291bnQgPSBwcm9wcy5tYXhUYWdDb3VudCxcbiAgICBmb3JtYXQgPSBwcm9wcy5mb3JtYXQsXG4gICAgbWFza0Zvcm1hdCA9IHByb3BzLm1hc2tGb3JtYXQsXG4gICAgcHJlc2VydmVJbnZhbGlkT25CbHVyID0gcHJvcHMucHJlc2VydmVJbnZhbGlkT25CbHVyLFxuICAgIG9uSW52YWxpZCA9IHByb3BzLm9uSW52YWxpZCxcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGludmFsaWQgPSBwcm9wcy5pbnZhbGlkLFxuICAgIGlucHV0UmVhZE9ubHkgPSBwcm9wcy5pbnB1dFJlYWRPbmx5LFxuICAgIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICBvbk9wZW5DaGFuZ2UgPSBwcm9wcy5vbk9wZW5DaGFuZ2UsXG4gICAgX29uTW91c2VEb3duID0gcHJvcHMub25Nb3VzZURvd24sXG4gICAgcmVxdWlyZWQgPSBwcm9wcy5yZXF1aXJlZCxcbiAgICBhcmlhUmVxdWlyZWQgPSBwcm9wc1snYXJpYS1yZXF1aXJlZCddLFxuICAgIGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cyxcbiAgICB0YWJJbmRleCA9IHByb3BzLnRhYkluZGV4LFxuICAgIHJlbW92ZUljb24gPSBwcm9wcy5yZW1vdmVJY29uLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgdmFyIHJ0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFByZWZpeCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChQaWNrZXJDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHM7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJvb3RSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IHJvb3RSZWYuY3VycmVudCxcbiAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cyhvcHRpb25zKSB7XG4gICAgICAgIHZhciBfaW5wdXRSZWYkY3VycmVudDtcbiAgICAgICAgKF9pbnB1dFJlZiRjdXJyZW50ID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQgPT09IHZvaWQgMCB8fCBfaW5wdXRSZWYkY3VycmVudC5mb2N1cyhvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQyO1xuICAgICAgICAoX2lucHV0UmVmJGN1cnJlbnQyID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQyID09PSB2b2lkIDAgfHwgX2lucHV0UmVmJGN1cnJlbnQyLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUHJvcHMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcm9vdFByb3BzID0gdXNlUm9vdFByb3BzKHJlc3RQcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uU2luZ2xlQ2hhbmdlID0gZnVuY3Rpb24gb25TaW5nbGVDaGFuZ2UoZGF0ZSkge1xuICAgIG9uQ2hhbmdlKFtkYXRlXSk7XG4gIH07XG4gIHZhciBvbk11bHRpcGxlUmVtb3ZlID0gZnVuY3Rpb24gb25NdWx0aXBsZVJlbW92ZShkYXRlKSB7XG4gICAgdmFyIG5leHRWYWx1ZXMgPSB2YWx1ZS5maWx0ZXIoZnVuY3Rpb24gKG9yaURhdGUpIHtcbiAgICAgIHJldHVybiBvcmlEYXRlICYmICFpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgb3JpRGF0ZSwgZGF0ZSwgaW50ZXJuYWxQaWNrZXIpO1xuICAgIH0pO1xuICAgIG9uQ2hhbmdlKG5leHRWYWx1ZXMpO1xuXG4gICAgLy8gV2hlbiBgb3BlbmAsIGl0IG1lYW5zIHVzZXIgaXMgb3BlcmF0aW5nIHRoZVxuICAgIGlmICghb3Blbikge1xuICAgICAgb25TdWJtaXQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IElucHV0cyA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VJbnB1dFByb3BzID0gdXNlSW5wdXRQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIG9uQ2hhbmdlOiBvblNpbmdsZUNoYW5nZVxuICAgIH0pLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHZhbHVlVGV4dHMgPSBfcmVmLnZhbHVlVGV4dHM7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWVUZXh0c1swXSB8fCAnJyxcbiAgICAgICAgYWN0aXZlOiBmb2N1c2VkXG4gICAgICB9O1xuICAgIH0pLFxuICAgIF91c2VJbnB1dFByb3BzMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbnB1dFByb3BzLCAyKSxcbiAgICBnZXRJbnB1dFByb3BzID0gX3VzZUlucHV0UHJvcHMyWzBdLFxuICAgIGdldFRleHQgPSBfdXNlSW5wdXRQcm9wczJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENsZWFyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHNob3dDbGVhciA9ICEhKGNsZWFySWNvbiAmJiB2YWx1ZS5sZW5ndGggJiYgIWRpc2FibGVkKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBNdWx0aXBsZSA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc2VsZWN0b3JOb2RlID0gbXVsdGlwbGUgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTXVsdGlwbGVEYXRlcywge1xuICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBvblJlbW92ZTogb25NdWx0aXBsZVJlbW92ZSxcbiAgICBmb3JtYXREYXRlOiBnZXRUZXh0LFxuICAgIG1heFRhZ0NvdW50OiBtYXhUYWdDb3VudCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVtb3ZlSWNvbjogcmVtb3ZlSWNvbixcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1tdWx0aXBsZS1pbnB1dFwiKSxcbiAgICB2YWx1ZTogdmFsdWUubWFwKGdldFRleHQpLmpvaW4oJywnKSxcbiAgICByZWY6IGlucHV0UmVmLFxuICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgIHRhYkluZGV4OiB0YWJJbmRleFxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHR5cGU6IFwic3VmZml4XCIsXG4gICAgaWNvbjogc3VmZml4SWNvblxuICB9KSwgc2hvd0NsZWFyICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENsZWFySWNvbiwge1xuICAgIGljb246IGNsZWFySWNvbixcbiAgICBvbkNsZWFyOiBvbkNsZWFyXG4gIH0pKSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBpbnB1dFJlZlxuICB9LCBnZXRJbnB1dFByb3BzKCksIHtcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgc3VmZml4SWNvbjogc3VmZml4SWNvbixcbiAgICBjbGVhckljb246IHNob3dDbGVhciAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDbGVhckljb24sIHtcbiAgICAgIGljb246IGNsZWFySWNvbixcbiAgICAgIG9uQ2xlYXI6IG9uQ2xlYXJcbiAgICB9KSxcbiAgICBzaG93QWN0aXZlQ2xzOiBmYWxzZVxuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCByb290UHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJlZml4Q2xzLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW11bHRpcGxlXCIpLCBtdWx0aXBsZSksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZm9jdXNlZFwiKSwgZm9jdXNlZCksIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1pbnZhbGlkXCIpLCBpbnZhbGlkKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ydGxcIiksIHJ0bCksIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIHJlZjogcm9vdFJlZixcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gICAgLy8gTm90IGxvc2UgY3VycmVudCBpbnB1dCBmb2N1c1xuICAgICxcbiAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgdmFyIF9pbnB1dFJlZiRjdXJyZW50MztcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIGlmICh0YXJnZXQgIT09ICgoX2lucHV0UmVmJGN1cnJlbnQzID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2lucHV0UmVmJGN1cnJlbnQzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudDMuaW5wdXRFbGVtZW50KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBfb25Nb3VzZURvd24gPT09IG51bGwgfHwgX29uTW91c2VEb3duID09PSB2b2lkIDAgfHwgX29uTW91c2VEb3duKGUpO1xuICAgIH1cbiAgfSksIHByZWZpeCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXByZWZpeFwiKVxuICB9LCBwcmVmaXgpLCBzZWxlY3Rvck5vZGUpO1xufVxudmFyIFJlZlNpbmdsZVNlbGVjdG9yID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoU2luZ2xlU2VsZWN0b3IpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVmU2luZ2xlU2VsZWN0b3IuZGlzcGxheU5hbWUgPSAnU2luZ2xlU2VsZWN0b3InO1xufVxuZXhwb3J0IGRlZmF1bHQgUmVmU2luZ2xlU2VsZWN0b3I7IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcInJjLXV0aWwvZXMvd2FybmluZ1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFVzZWQgZm9yIGB1c2VGaWxsZWRQcm9wc2Agc2luY2UgaXQgYWxyZWFkeSBpbiB0aGUgUmVhY3QudXNlTWVtb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbENsZWFySWNvbihwcmVmaXhDbHMsIGFsbG93Q2xlYXIsIGNsZWFySWNvbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjbGVhckljb24pIHtcbiAgICB3YXJuaW5nKGZhbHNlLCAnYGNsZWFySWNvbmAgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZS4gUGxlYXNlIHVzZSBgYWxsb3dDbGVhcmAgaW5zdGVhZC4nKTtcbiAgfVxuICBpZiAoYWxsb3dDbGVhciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgY29uZmlnID0gYWxsb3dDbGVhciAmJiBfdHlwZW9mKGFsbG93Q2xlYXIpID09PSAnb2JqZWN0JyA/IGFsbG93Q2xlYXIgOiB7fTtcbiAgcmV0dXJuIGNvbmZpZy5jbGVhckljb24gfHwgY2xlYXJJY29uIHx8IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWNsZWFyLWJ0blwiKVxuICB9KTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0IHBpY2tBdHRycyBmcm9tIFwicmMtdXRpbC9lcy9waWNrQXR0cnNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcm1hdFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVVdGlsXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJbnB1dFByb3BzKHByb3BzLCAvKiogVXNlZCBmb3IgU2luZ2xlUGlja2VyICovXG5wb3N0UHJvcHMpIHtcbiAgdmFyIGZvcm1hdCA9IHByb3BzLmZvcm1hdCxcbiAgICBtYXNrRm9ybWF0ID0gcHJvcHMubWFza0Zvcm1hdCxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBwcmVzZXJ2ZUludmFsaWRPbkJsdXIgPSBwcm9wcy5wcmVzZXJ2ZUludmFsaWRPbkJsdXIsXG4gICAgaW5wdXRSZWFkT25seSA9IHByb3BzLmlucHV0UmVhZE9ubHksXG4gICAgcmVxdWlyZWQgPSBwcm9wcy5yZXF1aXJlZCxcbiAgICBhcmlhUmVxdWlyZWQgPSBwcm9wc1snYXJpYS1yZXF1aXJlZCddLFxuICAgIG9uU3VibWl0ID0gcHJvcHMub25TdWJtaXQsXG4gICAgX29uRm9jdXMgPSBwcm9wcy5vbkZvY3VzLFxuICAgIF9vbkJsdXIgPSBwcm9wcy5vbkJsdXIsXG4gICAgb25JbnB1dENoYW5nZSA9IHByb3BzLm9uSW5wdXRDaGFuZ2UsXG4gICAgb25JbnZhbGlkID0gcHJvcHMub25JbnZhbGlkLFxuICAgIG9wZW4gPSBwcm9wcy5vcGVuLFxuICAgIG9uT3BlbkNoYW5nZSA9IHByb3BzLm9uT3BlbkNoYW5nZSxcbiAgICBfb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duLFxuICAgIF9vbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIGFjdGl2ZUhlbHAgPSBwcm9wcy5hY3RpdmVIZWxwLFxuICAgIG5hbWUgPSBwcm9wcy5uYW1lLFxuICAgIGF1dG9Db21wbGV0ZSA9IHByb3BzLmF1dG9Db21wbGV0ZSxcbiAgICBpZCA9IHByb3BzLmlkLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgaW52YWxpZCA9IHByb3BzLmludmFsaWQsXG4gICAgcGxhY2Vob2xkZXIgPSBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGFjdGl2ZUluZGV4ID0gcHJvcHMuYWN0aXZlSW5kZXgsXG4gICAgYWxsSGVscCA9IHByb3BzLmFsbEhlbHAsXG4gICAgcGlja2VyID0gcHJvcHMucGlja2VyO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBQYXJzZXIgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBwYXJzZURhdGUgPSBmdW5jdGlvbiBwYXJzZURhdGUoc3RyLCBmb3JtYXRTdHIpIHtcbiAgICB2YXIgcGFyc2VkID0gZ2VuZXJhdGVDb25maWcubG9jYWxlLnBhcnNlKGxvY2FsZS5sb2NhbGUsIHN0ciwgW2Zvcm1hdFN0cl0pO1xuICAgIHJldHVybiBwYXJzZWQgJiYgZ2VuZXJhdGVDb25maWcuaXNWYWxpZGF0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFRleHQgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZmlyc3RGb3JtYXQgPSBmb3JtYXRbMF07XG4gIHZhciBnZXRUZXh0ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGRhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VmFsdWUoZGF0ZSwge1xuICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICBmb3JtYXQ6IGZpcnN0Rm9ybWF0LFxuICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gICAgfSk7XG4gIH0sIFtsb2NhbGUsIGdlbmVyYXRlQ29uZmlnLCBmaXJzdEZvcm1hdF0pO1xuICB2YXIgdmFsdWVUZXh0cyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoZ2V0VGV4dCk7XG4gIH0sIFt2YWx1ZSwgZ2V0VGV4dF0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gU2l6ZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzaXplID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlZmF1bHRTaXplID0gcGlja2VyID09PSAndGltZScgPyA4IDogMTA7XG4gICAgdmFyIGxlbmd0aCA9IHR5cGVvZiBmaXJzdEZvcm1hdCA9PT0gJ2Z1bmN0aW9uJyA/IGZpcnN0Rm9ybWF0KGdlbmVyYXRlQ29uZmlnLmdldE5vdygpKS5sZW5ndGggOiBmaXJzdEZvcm1hdC5sZW5ndGg7XG4gICAgcmV0dXJuIE1hdGgubWF4KGRlZmF1bHRTaXplLCBsZW5ndGgpICsgMjtcbiAgfSwgW2ZpcnN0Rm9ybWF0LCBwaWNrZXIsIGdlbmVyYXRlQ29uZmlnXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gVmFsaWRhdGUgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF92YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KHRleHQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIHNpbmdsZUZvcm1hdCA9IGZvcm1hdFtpXTtcblxuICAgICAgLy8gT25seSBzdXBwb3J0IHN0cmluZyB0eXBlXG4gICAgICBpZiAodHlwZW9mIHNpbmdsZUZvcm1hdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9IHBhcnNlRGF0ZSh0ZXh0LCBzaW5nbGVGb3JtYXQpO1xuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IElucHV0ID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldElucHV0UHJvcHMgPSBmdW5jdGlvbiBnZXRJbnB1dFByb3BzKGluZGV4KSB7XG4gICAgZnVuY3Rpb24gZ2V0UHJvcChwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleCAhPT0gdW5kZWZpbmVkID8gcHJvcFZhbHVlW2luZGV4XSA6IHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHBpY2tlZEF0dHJzID0gcGlja0F0dHJzKHByb3BzLCB7XG4gICAgICBhcmlhOiB0cnVlLFxuICAgICAgZGF0YTogdHJ1ZVxuICAgIH0pO1xuICAgIHZhciBpbnB1dFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwaWNrZWRBdHRycyksIHt9LCB7XG4gICAgICAvLyA9PT09PT09PT09PT09PSBTaGFyZWQgPT09PT09PT09PT09PT1cbiAgICAgIGZvcm1hdDogbWFza0Zvcm1hdCxcbiAgICAgIHZhbGlkYXRlRm9ybWF0OiBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiAhIV92YWxpZGF0ZUZvcm1hdCh0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBwcmVzZXJ2ZUludmFsaWRPbkJsdXI6IHByZXNlcnZlSW52YWxpZE9uQmx1cixcbiAgICAgIHJlYWRPbmx5OiBpbnB1dFJlYWRPbmx5LFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgJ2FyaWEtcmVxdWlyZWQnOiBhcmlhUmVxdWlyZWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgLy8gPT09PT09PT09PT09PSBCeSBJbmRleCA9PT09PT09PT09PT09XG4gICAgICBpZDogZ2V0UHJvcChpZCksXG4gICAgICB2YWx1ZTogZ2V0UHJvcCh2YWx1ZVRleHRzKSB8fCAnJyxcbiAgICAgIGludmFsaWQ6IGdldFByb3AoaW52YWxpZCksXG4gICAgICBwbGFjZWhvbGRlcjogZ2V0UHJvcChwbGFjZWhvbGRlciksXG4gICAgICBhY3RpdmU6IGFjdGl2ZUluZGV4ID09PSBpbmRleCxcbiAgICAgIGhlbHBlZDogYWxsSGVscCB8fCBhY3RpdmVIZWxwICYmIGFjdGl2ZUluZGV4ID09PSBpbmRleCxcbiAgICAgIGRpc2FibGVkOiBnZXRQcm9wKGRpc2FibGVkKSxcbiAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgX29uRm9jdXMoZXZlbnQsIGluZGV4KTtcbiAgICAgIH0sXG4gICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihldmVudCkge1xuICAgICAgICAvLyBCbHVyIGRvIG5vdCB0cmlnZ2VyIGNsb3NlXG4gICAgICAgIC8vIFNpbmNlIGl0IG1heSBmb2N1cyB0byB0aGUgcG9wdXAgcGFuZWxcbiAgICAgICAgX29uQmx1cihldmVudCwgaW5kZXgpO1xuICAgICAgfSxcbiAgICAgIG9uU3VibWl0OiBvblN1Ym1pdCxcbiAgICAgIC8vIEdldCB2YWxpZGF0ZSB0ZXh0IHZhbHVlXG4gICAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodGV4dCkge1xuICAgICAgICBvbklucHV0Q2hhbmdlKCk7XG4gICAgICAgIHZhciBwYXJzZWQgPSBfdmFsaWRhdGVGb3JtYXQodGV4dCk7XG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBvbkludmFsaWQoZmFsc2UsIGluZGV4KTtcbiAgICAgICAgICBfb25DaGFuZ2UocGFyc2VkLCBpbmRleCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVsbCBvdXRlciB0aGF0IHRoZSB2YWx1ZSB0eXBlZCBpcyBpbnZhbGlkLlxuICAgICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCBpdCBtZWFucyB2YWxpZC5cbiAgICAgICAgb25JbnZhbGlkKCEhdGV4dCwgaW5kZXgpO1xuICAgICAgfSxcbiAgICAgIG9uSGVscDogZnVuY3Rpb24gb25IZWxwKCkge1xuICAgICAgICBvbk9wZW5DaGFuZ2UodHJ1ZSwge1xuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbktleURvd246IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICB2YXIgcHJldmVudGVkID0gZmFsc2U7XG4gICAgICAgIF9vbktleURvd24gPT09IG51bGwgfHwgX29uS2V5RG93biA9PT0gdm9pZCAwIHx8IF9vbktleURvd24oZXZlbnQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybmluZyhmYWxzZSwgJ2BwcmV2ZW50RGVmYXVsdGAgY2FsbGJhY2sgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIGNhbGwgYGV2ZW50LnByZXZlbnREZWZhdWx0YCBkaXJlY3RseS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiAhcHJldmVudGVkKSB7XG4gICAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgIG9uT3BlbkNoYW5nZShmYWxzZSwge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgIGlmICghb3Blbikge1xuICAgICAgICAgICAgICAgIG9uT3BlbkNoYW5nZSh0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBwb3N0UHJvcHMgPT09IG51bGwgfHwgcG9zdFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb3N0UHJvcHMoe1xuICAgICAgdmFsdWVUZXh0czogdmFsdWVUZXh0c1xuICAgIH0pKTtcblxuICAgIC8vID09PT09PT09PT09PT09IENsZWFuIFVwID09PT09PT09PT09PT09XG4gICAgT2JqZWN0LmtleXMoaW5wdXRQcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoaW5wdXRQcm9wc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGlucHV0UHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaW5wdXRQcm9wcztcbiAgfTtcbiAgcmV0dXJuIFtnZXRJbnB1dFByb3BzLCBnZXRUZXh0XTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBwaWNrUHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbWlzY1V0aWxcIjtcbnZhciBwcm9wTmFtZXMgPSBbJ29uTW91c2VFbnRlcicsICdvbk1vdXNlTGVhdmUnXTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJvb3RQcm9wcyhwcm9wcykge1xuICByZXR1cm4gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBpY2tQcm9wcyhwcm9wcywgcHJvcE5hbWVzKTtcbiAgfSwgW3Byb3BzXSk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGdldE1hc2tSYW5nZShrZXkpIHtcbiAgdmFyIFByZXNldFJhbmdlID0ge1xuICAgIFlZWVk6IFswLCA5OTk5LCBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCldLFxuICAgIE1NOiBbMSwgMTJdLFxuICAgIEREOiBbMSwgMzFdLFxuICAgIEhIOiBbMCwgMjNdLFxuICAgIG1tOiBbMCwgNTldLFxuICAgIHNzOiBbMCwgNTldLFxuICAgIFNTUzogWzAsIDk5OV1cbiAgfTtcbiAgcmV0dXJuIFByZXNldFJhbmdlW2tleV07XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgdXNlRXZlbnQsIHVzZU1lcmdlZFN0YXRlIH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgdXNlTGF5b3V0RWZmZWN0IGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZUxheW91dEVmZmVjdFwiO1xuaW1wb3J0IG9taXQgZnJvbSBcInJjLXV0aWwvZXMvb21pdFwiO1xuaW1wb3J0IHBpY2tBdHRycyBmcm9tIFwicmMtdXRpbC9lcy9waWNrQXR0cnNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VUb2dnbGVEYXRlcyBmcm9tIFwiLi4vaG9va3MvdXNlVG9nZ2xlRGF0ZXNcIjtcbmltcG9ydCBQaWNrZXJUcmlnZ2VyIGZyb20gXCIuLi9QaWNrZXJUcmlnZ2VyXCI7XG5pbXBvcnQgeyBwaWNrVHJpZ2dlclByb3BzIH0gZnJvbSBcIi4uL1BpY2tlclRyaWdnZXIvdXRpbFwiO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gXCIuLi91dGlscy9taXNjVXRpbFwiO1xuaW1wb3J0IFBpY2tlckNvbnRleHQgZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IHVzZUNlbGxSZW5kZXIgZnJvbSBcIi4vaG9va3MvdXNlQ2VsbFJlbmRlclwiO1xuaW1wb3J0IHVzZUZpZWxkc0ludmFsaWRhdGUgZnJvbSBcIi4vaG9va3MvdXNlRmllbGRzSW52YWxpZGF0ZVwiO1xuaW1wb3J0IHVzZUZpbGxlZFByb3BzIGZyb20gXCIuL2hvb2tzL3VzZUZpbGxlZFByb3BzXCI7XG5pbXBvcnQgdXNlT3BlbiBmcm9tIFwiLi9ob29rcy91c2VPcGVuXCI7XG5pbXBvcnQgdXNlUGlja2VyUmVmIGZyb20gXCIuL2hvb2tzL3VzZVBpY2tlclJlZlwiO1xuaW1wb3J0IHVzZVByZXNldHMgZnJvbSBcIi4vaG9va3MvdXNlUHJlc2V0c1wiO1xuaW1wb3J0IHVzZVJhbmdlQWN0aXZlIGZyb20gXCIuL2hvb2tzL3VzZVJhbmdlQWN0aXZlXCI7XG5pbXBvcnQgdXNlUmFuZ2VQaWNrZXJWYWx1ZSBmcm9tIFwiLi9ob29rcy91c2VSYW5nZVBpY2tlclZhbHVlXCI7XG5pbXBvcnQgdXNlUmFuZ2VWYWx1ZSwgeyB1c2VJbm5lclZhbHVlIH0gZnJvbSBcIi4vaG9va3MvdXNlUmFuZ2VWYWx1ZVwiO1xuaW1wb3J0IHVzZVNob3dOb3cgZnJvbSBcIi4vaG9va3MvdXNlU2hvd05vd1wiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCIuL1BvcHVwXCI7XG5pbXBvcnQgU2luZ2xlU2VsZWN0b3IgZnJvbSBcIi4vU2VsZWN0b3IvU2luZ2xlU2VsZWN0b3JcIjtcblxuLy8gVE9ETzogaXNJbnZhbGlkYXRlRGF0ZSB3aXRoIHNob3dUaW1lLmRpc2FibGVkVGltZSBzaG91bGQgbm90IHByb3ZpZGUgYHJhbmdlYCBwcm9wXG5cbi8qKiBJbnRlcm5hbCB1c2FnZS4gRm9yIGNyb3NzIGZ1bmN0aW9uIGdldCBzYW1lIGFsaWduZWQgcHJvcHMgKi9cblxuZnVuY3Rpb24gUGlja2VyKHByb3BzLCByZWYpIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBQcm9wID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VGaWxsZWRQcm9wcyA9IHVzZUZpbGxlZFByb3BzKHByb3BzKSxcbiAgICBfdXNlRmlsbGVkUHJvcHMyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUZpbGxlZFByb3BzLCA2KSxcbiAgICBmaWxsZWRQcm9wcyA9IF91c2VGaWxsZWRQcm9wczJbMF0sXG4gICAgaW50ZXJuYWxQaWNrZXIgPSBfdXNlRmlsbGVkUHJvcHMyWzFdLFxuICAgIGNvbXBsZXhQaWNrZXIgPSBfdXNlRmlsbGVkUHJvcHMyWzJdLFxuICAgIGZvcm1hdExpc3QgPSBfdXNlRmlsbGVkUHJvcHMyWzNdLFxuICAgIG1hc2tGb3JtYXQgPSBfdXNlRmlsbGVkUHJvcHMyWzRdLFxuICAgIGlzSW52YWxpZGF0ZURhdGUgPSBfdXNlRmlsbGVkUHJvcHMyWzVdO1xuICB2YXIgX3JlZiA9IGZpbGxlZFByb3BzLFxuICAgIHByZWZpeENscyA9IF9yZWYucHJlZml4Q2xzLFxuICAgIHN0eWxlcyA9IF9yZWYuc3R5bGVzLFxuICAgIGNsYXNzTmFtZXMgPSBfcmVmLmNsYXNzTmFtZXMsXG4gICAgb3JkZXIgPSBfcmVmLm9yZGVyLFxuICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYuZGVmYXVsdFZhbHVlLFxuICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICBuZWVkQ29uZmlybSA9IF9yZWYubmVlZENvbmZpcm0sXG4gICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIG9uS2V5RG93biA9IF9yZWYub25LZXlEb3duLFxuICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICBkaXNhYmxlZERhdGUgPSBfcmVmLmRpc2FibGVkRGF0ZSxcbiAgICBtaW5EYXRlID0gX3JlZi5taW5EYXRlLFxuICAgIG1heERhdGUgPSBfcmVmLm1heERhdGUsXG4gICAgZGVmYXVsdE9wZW4gPSBfcmVmLmRlZmF1bHRPcGVuLFxuICAgIG9wZW4gPSBfcmVmLm9wZW4sXG4gICAgb25PcGVuQ2hhbmdlID0gX3JlZi5vbk9wZW5DaGFuZ2UsXG4gICAgbG9jYWxlID0gX3JlZi5sb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBfcmVmLmdlbmVyYXRlQ29uZmlnLFxuICAgIHBpY2tlciA9IF9yZWYucGlja2VyLFxuICAgIHNob3dOb3cgPSBfcmVmLnNob3dOb3csXG4gICAgc2hvd1RvZGF5ID0gX3JlZi5zaG93VG9kYXksXG4gICAgc2hvd1RpbWUgPSBfcmVmLnNob3dUaW1lLFxuICAgIG1vZGUgPSBfcmVmLm1vZGUsXG4gICAgb25QYW5lbENoYW5nZSA9IF9yZWYub25QYW5lbENoYW5nZSxcbiAgICBvbkNhbGVuZGFyQ2hhbmdlID0gX3JlZi5vbkNhbGVuZGFyQ2hhbmdlLFxuICAgIG9uT2sgPSBfcmVmLm9uT2ssXG4gICAgbXVsdGlwbGUgPSBfcmVmLm11bHRpcGxlLFxuICAgIGRlZmF1bHRQaWNrZXJWYWx1ZSA9IF9yZWYuZGVmYXVsdFBpY2tlclZhbHVlLFxuICAgIHBpY2tlclZhbHVlID0gX3JlZi5waWNrZXJWYWx1ZSxcbiAgICBvblBpY2tlclZhbHVlQ2hhbmdlID0gX3JlZi5vblBpY2tlclZhbHVlQ2hhbmdlLFxuICAgIGlucHV0UmVhZE9ubHkgPSBfcmVmLmlucHV0UmVhZE9ubHksXG4gICAgc3VmZml4SWNvbiA9IF9yZWYuc3VmZml4SWNvbixcbiAgICByZW1vdmVJY29uID0gX3JlZi5yZW1vdmVJY29uLFxuICAgIG9uRm9jdXMgPSBfcmVmLm9uRm9jdXMsXG4gICAgb25CbHVyID0gX3JlZi5vbkJsdXIsXG4gICAgcHJlc2V0cyA9IF9yZWYucHJlc2V0cyxcbiAgICBjb21wb25lbnRzID0gX3JlZi5jb21wb25lbnRzLFxuICAgIGNlbGxSZW5kZXIgPSBfcmVmLmNlbGxSZW5kZXIsXG4gICAgZGF0ZVJlbmRlciA9IF9yZWYuZGF0ZVJlbmRlcixcbiAgICBtb250aENlbGxSZW5kZXIgPSBfcmVmLm1vbnRoQ2VsbFJlbmRlcixcbiAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUmVmcyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzZWxlY3RvclJlZiA9IHVzZVBpY2tlclJlZihyZWYpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gVXRpbCA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIHBpY2tlclBhcmFtKHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbXVsdGlwbGUgPyB2YWx1ZXMgOiB2YWx1ZXNbMF07XG4gIH1cbiAgdmFyIHRvZ2dsZURhdGVzID0gdXNlVG9nZ2xlRGF0ZXMoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgaW50ZXJuYWxQaWNrZXIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gT3BlbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlT3BlbiA9IHVzZU9wZW4ob3BlbiwgZGVmYXVsdE9wZW4sIFtkaXNhYmxlZF0sIG9uT3BlbkNoYW5nZSksXG4gICAgX3VzZU9wZW4yID0gX3NsaWNlZFRvQXJyYXkoX3VzZU9wZW4sIDIpLFxuICAgIG1lcmdlZE9wZW4gPSBfdXNlT3BlbjJbMF0sXG4gICAgdHJpZ2dlck9wZW4gPSBfdXNlT3BlbjJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ2FsZW5kYXIgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSW50ZXJuYWxDYWxlbmRhckNoYW5nZSA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxDYWxlbmRhckNoYW5nZShkYXRlcywgZGF0ZVN0cmluZ3MsIGluZm8pIHtcbiAgICBpZiAob25DYWxlbmRhckNoYW5nZSkge1xuICAgICAgdmFyIGZpbHRlcmVkSW5mbyA9IF9vYmplY3RTcHJlYWQoe30sIGluZm8pO1xuICAgICAgZGVsZXRlIGZpbHRlcmVkSW5mby5yYW5nZTtcbiAgICAgIG9uQ2FsZW5kYXJDaGFuZ2UocGlja2VyUGFyYW0oZGF0ZXMpLCBwaWNrZXJQYXJhbShkYXRlU3RyaW5ncyksIGZpbHRlcmVkSW5mbyk7XG4gICAgfVxuICB9O1xuICB2YXIgb25JbnRlcm5hbE9rID0gZnVuY3Rpb24gb25JbnRlcm5hbE9rKGRhdGVzKSB7XG4gICAgb25PayA9PT0gbnVsbCB8fCBvbk9rID09PSB2b2lkIDAgfHwgb25PayhwaWNrZXJQYXJhbShkYXRlcykpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZXMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlSW5uZXJWYWx1ZSA9IHVzZUlubmVyVmFsdWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgZm9ybWF0TGlzdCwgZmFsc2UsIG9yZGVyLCBkZWZhdWx0VmFsdWUsIHZhbHVlLCBvbkludGVybmFsQ2FsZW5kYXJDaGFuZ2UsIG9uSW50ZXJuYWxPayksXG4gICAgX3VzZUlubmVyVmFsdWUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUlubmVyVmFsdWUsIDUpLFxuICAgIG1lcmdlZFZhbHVlID0gX3VzZUlubmVyVmFsdWUyWzBdLFxuICAgIHNldElubmVyVmFsdWUgPSBfdXNlSW5uZXJWYWx1ZTJbMV0sXG4gICAgZ2V0Q2FsZW5kYXJWYWx1ZSA9IF91c2VJbm5lclZhbHVlMlsyXSxcbiAgICB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UgPSBfdXNlSW5uZXJWYWx1ZTJbM10sXG4gICAgdHJpZ2dlck9rID0gX3VzZUlubmVyVmFsdWUyWzRdO1xuICB2YXIgY2FsZW5kYXJWYWx1ZSA9IGdldENhbGVuZGFyVmFsdWUoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQWN0aXZlID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJbiBTaW5nbGVQaWNrZXIsIHdlIHdpbGwgYWx3YXlzIGdldCBgYWN0aXZlSW5kZXhgIGlzIDAuXG4gIHZhciBfdXNlUmFuZ2VBY3RpdmUgPSB1c2VSYW5nZUFjdGl2ZShbZGlzYWJsZWRdKSxcbiAgICBfdXNlUmFuZ2VBY3RpdmUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVJhbmdlQWN0aXZlLCA0KSxcbiAgICBmb2N1c2VkID0gX3VzZVJhbmdlQWN0aXZlMlswXSxcbiAgICB0cmlnZ2VyRm9jdXMgPSBfdXNlUmFuZ2VBY3RpdmUyWzFdLFxuICAgIGxhc3RPcGVyYXRpb24gPSBfdXNlUmFuZ2VBY3RpdmUyWzJdLFxuICAgIGFjdGl2ZUluZGV4ID0gX3VzZVJhbmdlQWN0aXZlMlszXTtcbiAgdmFyIG9uU2hhcmVkRm9jdXMgPSBmdW5jdGlvbiBvblNoYXJlZEZvY3VzKGV2ZW50KSB7XG4gICAgdHJpZ2dlckZvY3VzKHRydWUpO1xuICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwIHx8IG9uRm9jdXMoZXZlbnQsIHt9KTtcbiAgfTtcbiAgdmFyIG9uU2hhcmVkQmx1ciA9IGZ1bmN0aW9uIG9uU2hhcmVkQmx1cihldmVudCkge1xuICAgIHRyaWdnZXJGb2N1cyhmYWxzZSk7XG4gICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwIHx8IG9uQmx1cihldmVudCwge30pO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gTW9kZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShwaWNrZXIsIHtcbiAgICAgIHZhbHVlOiBtb2RlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbWVyZ2VkTW9kZSA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0TW9kZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG5cbiAgLyoqIEV4dGVuZHMgZnJvbSBgbWVyZ2VkTW9kZWAgdG8gcGF0Y2ggYGRhdGV0aW1lYCBtb2RlICovXG4gIHZhciBpbnRlcm5hbE1vZGUgPSBtZXJnZWRNb2RlID09PSAnZGF0ZScgJiYgc2hvd1RpbWUgPyAnZGF0ZXRpbWUnIDogbWVyZ2VkTW9kZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBTaG93IE5vdyA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkU2hvd05vdyA9IHVzZVNob3dOb3cocGlja2VyLCBtZXJnZWRNb2RlLCBzaG93Tm93LCBzaG93VG9kYXkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvbkludGVybmFsQ2hhbmdlID0gb25DaGFuZ2UgJiYgZnVuY3Rpb24gKGRhdGVzLCBkYXRlU3RyaW5ncykge1xuICAgIG9uQ2hhbmdlKHBpY2tlclBhcmFtKGRhdGVzKSwgcGlja2VyUGFyYW0oZGF0ZVN0cmluZ3MpKTtcbiAgfTtcbiAgdmFyIF91c2VSYW5nZVZhbHVlID0gdXNlUmFuZ2VWYWx1ZShfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZpbGxlZFByb3BzKSwge30sIHtcbiAgICAgIG9uQ2hhbmdlOiBvbkludGVybmFsQ2hhbmdlXG4gICAgfSksIG1lcmdlZFZhbHVlLCBzZXRJbm5lclZhbHVlLCBnZXRDYWxlbmRhclZhbHVlLCB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UsIFtdLFxuICAgIC8vZGlzYWJsZWQsXG4gICAgZm9ybWF0TGlzdCwgZm9jdXNlZCwgbWVyZ2VkT3BlbiwgaXNJbnZhbGlkYXRlRGF0ZSksXG4gICAgX3VzZVJhbmdlVmFsdWUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVJhbmdlVmFsdWUsIDIpLFxuICAgIC8qKiBUcmlnZ2VyIGBvbkNoYW5nZWAgZGlyZWN0bHkgd2l0aG91dCBjaGVjayBgZGlzYWJsZWREYXRlYCAqL1xuICAgIHRyaWdnZXJTdWJtaXRDaGFuZ2UgPSBfdXNlUmFuZ2VWYWx1ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gVmFsaWRhdGUgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VGaWVsZHNJbnZhbGlkYXRlID0gdXNlRmllbGRzSW52YWxpZGF0ZShjYWxlbmRhclZhbHVlLCBpc0ludmFsaWRhdGVEYXRlKSxcbiAgICBfdXNlRmllbGRzSW52YWxpZGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlRmllbGRzSW52YWxpZGF0ZSwgMiksXG4gICAgc3VibWl0SW52YWxpZGF0ZXMgPSBfdXNlRmllbGRzSW52YWxpZGF0ZTJbMF0sXG4gICAgb25TZWxlY3RvckludmFsaWQgPSBfdXNlRmllbGRzSW52YWxpZGF0ZTJbMV07XG4gIHZhciBzdWJtaXRJbnZhbGlkYXRlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN1Ym1pdEludmFsaWRhdGVzLnNvbWUoZnVuY3Rpb24gKGludmFsaWRhdGVkKSB7XG4gICAgICByZXR1cm4gaW52YWxpZGF0ZWQ7XG4gICAgfSk7XG4gIH0sIFtzdWJtaXRJbnZhbGlkYXRlc10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBQaWNrZXIgVmFsdWUgPT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFByb3h5IHRvIHNpbmdsZSBwaWNrZXJWYWx1ZVxuICB2YXIgb25JbnRlcm5hbFBpY2tlclZhbHVlQ2hhbmdlID0gZnVuY3Rpb24gb25JbnRlcm5hbFBpY2tlclZhbHVlQ2hhbmdlKGRhdGVzLCBpbmZvKSB7XG4gICAgaWYgKG9uUGlja2VyVmFsdWVDaGFuZ2UpIHtcbiAgICAgIHZhciBjbGVhbkluZm8gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGluZm8pLCB7fSwge1xuICAgICAgICBtb2RlOiBpbmZvLm1vZGVbMF1cbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIGNsZWFuSW5mby5yYW5nZTtcbiAgICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UoZGF0ZXNbMF0sIGNsZWFuSW5mbyk7XG4gICAgfVxuICB9O1xuICB2YXIgX3VzZVJhbmdlUGlja2VyVmFsdWUgPSB1c2VSYW5nZVBpY2tlclZhbHVlKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIGNhbGVuZGFyVmFsdWUsIFttZXJnZWRNb2RlXSwgbWVyZ2VkT3BlbiwgYWN0aXZlSW5kZXgsIGludGVybmFsUGlja2VyLCBmYWxzZSxcbiAgICAvLyBtdWx0aXBsZVBhbmVsLFxuICAgIGRlZmF1bHRQaWNrZXJWYWx1ZSwgcGlja2VyVmFsdWUsIHRvQXJyYXkoc2hvd1RpbWUgPT09IG51bGwgfHwgc2hvd1RpbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNob3dUaW1lLmRlZmF1bHRPcGVuVmFsdWUpLCBvbkludGVybmFsUGlja2VyVmFsdWVDaGFuZ2UsIG1pbkRhdGUsIG1heERhdGUpLFxuICAgIF91c2VSYW5nZVBpY2tlclZhbHVlMiA9IF9zbGljZWRUb0FycmF5KF91c2VSYW5nZVBpY2tlclZhbHVlLCAyKSxcbiAgICBjdXJyZW50UGlja2VyVmFsdWUgPSBfdXNlUmFuZ2VQaWNrZXJWYWx1ZTJbMF0sXG4gICAgc2V0Q3VycmVudFBpY2tlclZhbHVlID0gX3VzZVJhbmdlUGlja2VyVmFsdWUyWzFdO1xuXG4gIC8vID4+PiBNb2RlIG5lZWQgd2FpdCBmb3IgYHBpY2tlclZhbHVlYFxuICB2YXIgdHJpZ2dlck1vZGVDaGFuZ2UgPSB1c2VFdmVudChmdW5jdGlvbiAobmV4dFBpY2tlclZhbHVlLCBuZXh0TW9kZSwgdHJpZ2dlckV2ZW50KSB7XG4gICAgc2V0TW9kZShuZXh0TW9kZSk7XG5cbiAgICAvLyBDb21wYXRpYmxlIHdpdGggYG9uUGFuZWxDaGFuZ2VgXG4gICAgaWYgKG9uUGFuZWxDaGFuZ2UgJiYgdHJpZ2dlckV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIGxhc3RQaWNrZXJWYWx1ZSA9IG5leHRQaWNrZXJWYWx1ZSB8fCBjYWxlbmRhclZhbHVlW2NhbGVuZGFyVmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICBvblBhbmVsQ2hhbmdlKGxhc3RQaWNrZXJWYWx1ZSwgbmV4dE1vZGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFN1Ym1pdCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIERpZmZlcmVudCB3aXRoIFJhbmdlUGlja2VyLCBjb25maXJtIHNob3VsZCBjaGVjayBgbXVsdGlwbGVgIGxvZ2ljLlxuICAgKiBUaGlzIHdpbGwgbmV2ZXIgcHJvdmlkZSBgZGF0ZWAgaW5zdGVhZC5cbiAgICovXG4gIHZhciB0cmlnZ2VyQ29uZmlybSA9IGZ1bmN0aW9uIHRyaWdnZXJDb25maXJtKCkge1xuICAgIHRyaWdnZXJTdWJtaXRDaGFuZ2UoZ2V0Q2FsZW5kYXJWYWx1ZSgpKTtcbiAgICB0cmlnZ2VyT3BlbihmYWxzZSwge1xuICAgICAgZm9yY2U6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gQ2xpY2sgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25TZWxlY3RvckNsaWNrID0gZnVuY3Rpb24gb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKCFkaXNhYmxlZCAmJiAhc2VsZWN0b3JSZWYuY3VycmVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAvLyBDbGljayB0byBmb2N1cyB0aGUgZW5hYmxlZCBpbnB1dFxuICAgICAgc2VsZWN0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICB0cmlnZ2VyT3Blbih0cnVlKTtcbiAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCB8fCBvbkNsaWNrKGV2ZW50KTtcbiAgfTtcbiAgdmFyIG9uU2VsZWN0b3JDbGVhciA9IGZ1bmN0aW9uIG9uU2VsZWN0b3JDbGVhcigpIHtcbiAgICB0cmlnZ2VyU3VibWl0Q2hhbmdlKG51bGwpO1xuICAgIHRyaWdnZXJPcGVuKGZhbHNlLCB7XG4gICAgICBmb3JjZTogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBIb3ZlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShudWxsKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBob3ZlclNvdXJjZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0SG92ZXJTb3VyY2UgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKG51bGwpLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUzLCAyKSxcbiAgICBpbnRlcm5hbEhvdmVyVmFsdWUgPSBfUmVhY3QkdXNlU3RhdGU0WzBdLFxuICAgIHNldEludGVybmFsSG92ZXJWYWx1ZSA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBob3ZlclZhbHVlcyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbaW50ZXJuYWxIb3ZlclZhbHVlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNhbGVuZGFyVmFsdWUpKS5maWx0ZXIoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0pO1xuICAgIHJldHVybiBtdWx0aXBsZSA/IHZhbHVlcyA6IHZhbHVlcy5zbGljZSgwLCAxKTtcbiAgfSwgW2NhbGVuZGFyVmFsdWUsIGludGVybmFsSG92ZXJWYWx1ZSwgbXVsdGlwbGVdKTtcblxuICAvLyBTZWxlY3RvciB2YWx1ZXMgaXMgZGlmZmVyZW50IHdpdGggUmFuZ2VQaWNrZXJcbiAgLy8gd2hpY2ggY2FuIG5vdCB1c2UgYGhvdmVyVmFsdWVgIGRpcmVjdGx5XG4gIHZhciBzZWxlY3RvclZhbHVlcyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbXVsdGlwbGUgJiYgaW50ZXJuYWxIb3ZlclZhbHVlKSB7XG4gICAgICByZXR1cm4gW2ludGVybmFsSG92ZXJWYWx1ZV07XG4gICAgfVxuICAgIHJldHVybiBjYWxlbmRhclZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSk7XG4gIH0sIFtjYWxlbmRhclZhbHVlLCBpbnRlcm5hbEhvdmVyVmFsdWUsIG11bHRpcGxlXSk7XG5cbiAgLy8gQ2xlYW4gdXAgYGludGVybmFsSG92ZXJWYWx1ZXNgIHdoZW4gY2xvc2VkXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtZXJnZWRPcGVuKSB7XG4gICAgICBzZXRJbnRlcm5hbEhvdmVyVmFsdWUobnVsbCk7XG4gICAgfVxuICB9LCBbbWVyZ2VkT3Blbl0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09ICAgICAgICAgICAgICAgICAgICAgICBQYW5lbHMgICAgICAgICAgICAgICAgICAgICAgID09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IFByZXNldHMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBwcmVzZXRMaXN0ID0gdXNlUHJlc2V0cyhwcmVzZXRzKTtcbiAgdmFyIG9uUHJlc2V0SG92ZXIgPSBmdW5jdGlvbiBvblByZXNldEhvdmVyKG5leHRWYWx1ZSkge1xuICAgIHNldEludGVybmFsSG92ZXJWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHNldEhvdmVyU291cmNlKCdwcmVzZXQnKTtcbiAgfTtcblxuICAvLyBUT0RPOiBoYW5kbGUgdGhpc1xuICB2YXIgb25QcmVzZXRTdWJtaXQgPSBmdW5jdGlvbiBvblByZXNldFN1Ym1pdChuZXh0VmFsdWUpIHtcbiAgICB2YXIgbmV4dENhbGVuZGFyVmFsdWVzID0gbXVsdGlwbGUgPyB0b2dnbGVEYXRlcyhnZXRDYWxlbmRhclZhbHVlKCksIG5leHRWYWx1ZSkgOiBbbmV4dFZhbHVlXTtcbiAgICB2YXIgcGFzc2VkID0gdHJpZ2dlclN1Ym1pdENoYW5nZShuZXh0Q2FsZW5kYXJWYWx1ZXMpO1xuICAgIGlmIChwYXNzZWQgJiYgIW11bHRpcGxlKSB7XG4gICAgICB0cmlnZ2VyT3BlbihmYWxzZSwge1xuICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgb25Ob3cgPSBmdW5jdGlvbiBvbk5vdyhub3cpIHtcbiAgICBvblByZXNldFN1Ym1pdChub3cpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBQYW5lbCA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBvblBhbmVsSG92ZXIgPSBmdW5jdGlvbiBvblBhbmVsSG92ZXIoZGF0ZSkge1xuICAgIHNldEludGVybmFsSG92ZXJWYWx1ZShkYXRlKTtcbiAgICBzZXRIb3ZlclNvdXJjZSgnY2VsbCcpO1xuICB9O1xuXG4gIC8vID4+PiBGb2N1c1xuICB2YXIgb25QYW5lbEZvY3VzID0gZnVuY3Rpb24gb25QYW5lbEZvY3VzKGV2ZW50KSB7XG4gICAgdHJpZ2dlck9wZW4odHJ1ZSk7XG4gICAgb25TaGFyZWRGb2N1cyhldmVudCk7XG4gIH07XG5cbiAgLy8gPj4+IENhbGVuZGFyXG4gIHZhciBvblBhbmVsU2VsZWN0ID0gZnVuY3Rpb24gb25QYW5lbFNlbGVjdChkYXRlKSB7XG4gICAgbGFzdE9wZXJhdGlvbigncGFuZWwnKTtcblxuICAgIC8vIE5vdCBjaGFuZ2UgdmFsdWVzIGlmIG11bHRpcGxlIGFuZCBjdXJyZW50IHBhbmVsIGlzIHRvIG1hdGNoIHdpdGggcGlja2VyXG4gICAgaWYgKG11bHRpcGxlICYmIGludGVybmFsTW9kZSAhPT0gcGlja2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBuZXh0VmFsdWVzID0gbXVsdGlwbGUgPyB0b2dnbGVEYXRlcyhnZXRDYWxlbmRhclZhbHVlKCksIGRhdGUpIDogW2RhdGVdO1xuXG4gICAgLy8gT25seSB0cmlnZ2VyIGNhbGVuZGFyIGV2ZW50IGJ1dCBub3QgdXBkYXRlIGludGVybmFsIGBjYWxlbmRhclZhbHVlYCBzdGF0ZVxuICAgIHRyaWdnZXJDYWxlbmRhckNoYW5nZShuZXh0VmFsdWVzKTtcblxuICAgIC8vID4+PiBUcmlnZ2VyIG5leHQgYWN0aXZlIGlmICFuZWVkQ29uZmlybVxuICAgIC8vIEZ1bGx5IGxvZ2ljIGNoZWNrIGB1c2VSYW5nZVZhbHVlYCBob29rXG4gICAgaWYgKCFuZWVkQ29uZmlybSAmJiAhY29tcGxleFBpY2tlciAmJiBpbnRlcm5hbFBpY2tlciA9PT0gaW50ZXJuYWxNb2RlKSB7XG4gICAgICB0cmlnZ2VyQ29uZmlybSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyA+Pj4gQ2xvc2VcbiAgdmFyIG9uUG9wdXBDbG9zZSA9IGZ1bmN0aW9uIG9uUG9wdXBDbG9zZSgpIHtcbiAgICAvLyBDbG9zZSBwb3B1cFxuICAgIHRyaWdnZXJPcGVuKGZhbHNlKTtcbiAgfTtcblxuICAvLyA+Pj4gY2VsbFJlbmRlclxuICB2YXIgb25JbnRlcm5hbENlbGxSZW5kZXIgPSB1c2VDZWxsUmVuZGVyKGNlbGxSZW5kZXIsIGRhdGVSZW5kZXIsIG1vbnRoQ2VsbFJlbmRlcik7XG5cbiAgLy8gPj4+IGludmFsaWRcblxuICB2YXIgcGFuZWxQcm9wcyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb21Qcm9wcyA9IHBpY2tBdHRycyhmaWxsZWRQcm9wcywgZmFsc2UpO1xuICAgIHZhciByZXN0UHJvcHMgPSBvbWl0KGZpbGxlZFByb3BzLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKGRvbVByb3BzKSksIFsnb25DaGFuZ2UnLCAnb25DYWxlbmRhckNoYW5nZScsICdzdHlsZScsICdjbGFzc05hbWUnLCAnb25QYW5lbENoYW5nZSddKSk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFByb3BzKSwge30sIHtcbiAgICAgIG11bHRpcGxlOiBmaWxsZWRQcm9wcy5tdWx0aXBsZVxuICAgIH0pO1xuICB9LCBbZmlsbGVkUHJvcHNdKTtcblxuICAvLyA+Pj4gUmVuZGVyXG4gIHZhciBwYW5lbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBvcHVwLCBfZXh0ZW5kcyh7fSwgcGFuZWxQcm9wcywge1xuICAgIHNob3dOb3c6IG1lcmdlZFNob3dOb3csXG4gICAgc2hvd1RpbWU6IHNob3dUaW1lXG4gICAgLy8gRGlzYWJsZWRcbiAgICAsXG4gICAgZGlzYWJsZWREYXRlOiBkaXNhYmxlZERhdGVcbiAgICAvLyBGb2N1c1xuICAgICxcbiAgICBvbkZvY3VzOiBvblBhbmVsRm9jdXMsXG4gICAgb25CbHVyOiBvblNoYXJlZEJsdXJcbiAgICAvLyBNb2RlXG4gICAgLFxuICAgIHBpY2tlcjogcGlja2VyLFxuICAgIG1vZGU6IG1lcmdlZE1vZGUsXG4gICAgaW50ZXJuYWxNb2RlOiBpbnRlcm5hbE1vZGUsXG4gICAgb25QYW5lbENoYW5nZTogdHJpZ2dlck1vZGVDaGFuZ2VcbiAgICAvLyBWYWx1ZVxuICAgICxcbiAgICBmb3JtYXQ6IG1hc2tGb3JtYXQsXG4gICAgdmFsdWU6IGNhbGVuZGFyVmFsdWUsXG4gICAgaXNJbnZhbGlkOiBpc0ludmFsaWRhdGVEYXRlLFxuICAgIG9uQ2hhbmdlOiBudWxsLFxuICAgIG9uU2VsZWN0OiBvblBhbmVsU2VsZWN0XG4gICAgLy8gUGlja2VyVmFsdWVcbiAgICAsXG4gICAgcGlja2VyVmFsdWU6IGN1cnJlbnRQaWNrZXJWYWx1ZSxcbiAgICBkZWZhdWx0T3BlblZhbHVlOiBzaG93VGltZSA9PT0gbnVsbCB8fCBzaG93VGltZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2hvd1RpbWUuZGVmYXVsdE9wZW5WYWx1ZSxcbiAgICBvblBpY2tlclZhbHVlQ2hhbmdlOiBzZXRDdXJyZW50UGlja2VyVmFsdWVcbiAgICAvLyBIb3ZlclxuICAgICxcbiAgICBob3ZlclZhbHVlOiBob3ZlclZhbHVlcyxcbiAgICBvbkhvdmVyOiBvblBhbmVsSG92ZXJcbiAgICAvLyBTdWJtaXRcbiAgICAsXG4gICAgbmVlZENvbmZpcm06IG5lZWRDb25maXJtLFxuICAgIG9uU3VibWl0OiB0cmlnZ2VyQ29uZmlybSxcbiAgICBvbk9rOiB0cmlnZ2VyT2tcbiAgICAvLyBQcmVzZXRcbiAgICAsXG4gICAgcHJlc2V0czogcHJlc2V0TGlzdCxcbiAgICBvblByZXNldEhvdmVyOiBvblByZXNldEhvdmVyLFxuICAgIG9uUHJlc2V0U3VibWl0OiBvblByZXNldFN1Ym1pdCxcbiAgICBvbk5vdzogb25Ob3dcbiAgICAvLyBSZW5kZXJcbiAgICAsXG4gICAgY2VsbFJlbmRlcjogb25JbnRlcm5hbENlbGxSZW5kZXJcbiAgfSkpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09ICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICAgICAgICAgICAgICAgICAgID09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uU2VsZWN0b3JDaGFuZ2UgPSBmdW5jdGlvbiBvblNlbGVjdG9yQ2hhbmdlKGRhdGUpIHtcbiAgICB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UoZGF0ZSk7XG4gIH07XG4gIHZhciBvblNlbGVjdG9ySW5wdXRDaGFuZ2UgPSBmdW5jdGlvbiBvblNlbGVjdG9ySW5wdXRDaGFuZ2UoKSB7XG4gICAgbGFzdE9wZXJhdGlvbignaW5wdXQnKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBTZWxlY3RvciA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25TZWxlY3RvckZvY3VzID0gZnVuY3Rpb24gb25TZWxlY3RvckZvY3VzKGV2ZW50KSB7XG4gICAgbGFzdE9wZXJhdGlvbignaW5wdXQnKTtcbiAgICB0cmlnZ2VyT3Blbih0cnVlLCB7XG4gICAgICBpbmhlcml0OiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBzZXRBY3RpdmVJbmRleChpbmRleCk7XG5cbiAgICBvblNoYXJlZEZvY3VzKGV2ZW50KTtcbiAgfTtcbiAgdmFyIG9uU2VsZWN0b3JCbHVyID0gZnVuY3Rpb24gb25TZWxlY3RvckJsdXIoZXZlbnQpIHtcbiAgICB0cmlnZ2VyT3BlbihmYWxzZSk7XG4gICAgb25TaGFyZWRCbHVyKGV2ZW50KTtcbiAgfTtcbiAgdmFyIG9uU2VsZWN0b3JLZXlEb3duID0gZnVuY3Rpb24gb25TZWxlY3RvcktleURvd24oZXZlbnQsIHByZXZlbnREZWZhdWx0KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRyaWdnZXJDb25maXJtKCk7XG4gICAgfVxuICAgIG9uS2V5RG93biA9PT0gbnVsbCB8fCBvbktleURvd24gPT09IHZvaWQgMCB8fCBvbktleURvd24oZXZlbnQsIHByZXZlbnREZWZhdWx0KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBDb250ZXh0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnLFxuICAgICAgYnV0dG9uOiBjb21wb25lbnRzLmJ1dHRvbixcbiAgICAgIGlucHV0OiBjb21wb25lbnRzLmlucHV0XG4gICAgfTtcbiAgfSwgW3ByZWZpeENscywgbG9jYWxlLCBnZW5lcmF0ZUNvbmZpZywgY29tcG9uZW50cy5idXR0b24sIGNvbXBvbmVudHMuaW5wdXRdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4gTW9kZVxuICAvLyBSZXNldCBmb3IgZXZlcnkgYWN0aXZlXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1lcmdlZE9wZW4gJiYgYWN0aXZlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTGVnYWN5IGNvbXBhdGlibGUuIFRoaXMgZWZmZWN0IHVwZGF0ZSBzaG91bGQgbm90IHRyaWdnZXIgYG9uUGFuZWxDaGFuZ2VgXG4gICAgICB0cmlnZ2VyTW9kZUNoYW5nZShudWxsLCBwaWNrZXIsIGZhbHNlKTtcbiAgICB9XG4gIH0sIFttZXJnZWRPcGVuLCBhY3RpdmVJbmRleCwgcGlja2VyXSk7XG5cbiAgLy8gPj4+IEZvciBjb21wbGV4IHBpY2tlciwgd2UgbmVlZCBjaGVjayBpZiBuZWVkIHRvIGZvY3VzIG5leHQgb25lXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxhc3RPcCA9IGxhc3RPcGVyYXRpb24oKTtcblxuICAgIC8vIFRyYWRlIGFzIGNvbmZpcm0gb24gZmllbGQgbGVhdmVcbiAgICBpZiAoIW1lcmdlZE9wZW4gJiYgbGFzdE9wID09PSAnaW5wdXQnKSB7XG4gICAgICB0cmlnZ2VyT3BlbihmYWxzZSk7XG4gICAgICB0cmlnZ2VyQ29uZmlybSgpO1xuICAgIH1cblxuICAgIC8vIFN1Ym1pdCB3aXRoIGNvbXBsZXggcGlja2VyXG4gICAgaWYgKCFtZXJnZWRPcGVuICYmIGNvbXBsZXhQaWNrZXIgJiYgIW5lZWRDb25maXJtICYmIGxhc3RPcCA9PT0gJ3BhbmVsJykge1xuICAgICAgdHJpZ2dlckNvbmZpcm0oKTtcbiAgICB9XG4gIH0sIFttZXJnZWRPcGVuXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBpY2tlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQaWNrZXJUcmlnZ2VyLCBfZXh0ZW5kcyh7fSwgcGlja1RyaWdnZXJQcm9wcyhmaWxsZWRQcm9wcyksIHtcbiAgICBwb3B1cEVsZW1lbnQ6IHBhbmVsLFxuICAgIHBvcHVwU3R5bGU6IHN0eWxlcy5wb3B1cCxcbiAgICBwb3B1cENsYXNzTmFtZTogY2xhc3NOYW1lcy5wb3B1cFxuICAgIC8vIFZpc2libGVcbiAgICAsXG4gICAgdmlzaWJsZTogbWVyZ2VkT3BlbixcbiAgICBvbkNsb3NlOiBvblBvcHVwQ2xvc2VcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNpbmdsZVNlbGVjdG9yXG4gIC8vIFNoYXJlZFxuICAsIF9leHRlbmRzKHt9LCBmaWxsZWRQcm9wcywge1xuICAgIC8vIFJlZlxuICAgIHJlZjogc2VsZWN0b3JSZWZcbiAgICAvLyBJY29uXG4gICAgLFxuICAgIHN1ZmZpeEljb246IHN1ZmZpeEljb24sXG4gICAgcmVtb3ZlSWNvbjogcmVtb3ZlSWNvblxuICAgIC8vIEFjdGl2ZVxuICAgICxcbiAgICBhY3RpdmVIZWxwOiAhIWludGVybmFsSG92ZXJWYWx1ZSxcbiAgICBhbGxIZWxwOiAhIWludGVybmFsSG92ZXJWYWx1ZSAmJiBob3ZlclNvdXJjZSA9PT0gJ3ByZXNldCcsXG4gICAgZm9jdXNlZDogZm9jdXNlZCxcbiAgICBvbkZvY3VzOiBvblNlbGVjdG9yRm9jdXMsXG4gICAgb25CbHVyOiBvblNlbGVjdG9yQmx1cixcbiAgICBvbktleURvd246IG9uU2VsZWN0b3JLZXlEb3duLFxuICAgIG9uU3VibWl0OiB0cmlnZ2VyQ29uZmlybVxuICAgIC8vIENoYW5nZVxuICAgICxcbiAgICB2YWx1ZTogc2VsZWN0b3JWYWx1ZXMsXG4gICAgbWFza0Zvcm1hdDogbWFza0Zvcm1hdCxcbiAgICBvbkNoYW5nZTogb25TZWxlY3RvckNoYW5nZSxcbiAgICBvbklucHV0Q2hhbmdlOiBvblNlbGVjdG9ySW5wdXRDaGFuZ2UsXG4gICAgaW50ZXJuYWxQaWNrZXI6IGludGVybmFsUGlja2VyXG4gICAgLy8gRm9ybWF0XG4gICAgLFxuICAgIGZvcm1hdDogZm9ybWF0TGlzdCxcbiAgICBpbnB1dFJlYWRPbmx5OiBpbnB1dFJlYWRPbmx5XG4gICAgLy8gRGlzYWJsZWRcbiAgICAsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgLy8gT3BlblxuICAgICxcbiAgICBvcGVuOiBtZXJnZWRPcGVuLFxuICAgIG9uT3BlbkNoYW5nZTogdHJpZ2dlck9wZW5cbiAgICAvLyBDbGlja1xuICAgICxcbiAgICBvbkNsaWNrOiBvblNlbGVjdG9yQ2xpY2ssXG4gICAgb25DbGVhcjogb25TZWxlY3RvckNsZWFyXG4gICAgLy8gSW52YWxpZFxuICAgICxcbiAgICBpbnZhbGlkOiBzdWJtaXRJbnZhbGlkYXRlLFxuICAgIG9uSW52YWxpZDogZnVuY3Rpb24gb25JbnZhbGlkKGludmFsaWQpIHtcbiAgICAgIC8vIE9ubHkgYHNpbmdsZWAgbW9kZSBzdXBwb3J0IHR5cGUgZGF0ZS5cbiAgICAgIC8vIGBtdWx0aXBsZWAgbW9kZSBjYW4gbm90IHR5cGluZy5cbiAgICAgIG9uU2VsZWN0b3JJbnZhbGlkKGludmFsaWQsIDApO1xuICAgIH1cbiAgfSkpKSk7XG59XG52YXIgUmVmUGlja2VyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoUGlja2VyKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlZlBpY2tlci5kaXNwbGF5TmFtZSA9ICdSZWZQaWNrZXInO1xufVxuZXhwb3J0IGRlZmF1bHQgUmVmUGlja2VyOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBQaWNrZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZGVmYXVsdCBQaWNrZXJDb250ZXh0OyIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDZWxsUmVuZGVyKGNlbGxSZW5kZXIsIGRhdGVSZW5kZXIsIG1vbnRoQ2VsbFJlbmRlciwgcmFuZ2UpIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuaW5nKCFkYXRlUmVuZGVyLCBcIidkYXRlUmVuZGVyJyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICdjZWxsUmVuZGVyJyBpbnN0ZWFkLlwiKTtcbiAgICB3YXJuaW5nKCFtb250aENlbGxSZW5kZXIsIFwiJ21vbnRoQ2VsbFJlbmRlcicgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnY2VsbFJlbmRlcicgaW5zdGVhZC5cIik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNZXJnZWQgcmVuZGVyXG4gIHZhciBtZXJnZWRDZWxsUmVuZGVyID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNlbGxSZW5kZXIpIHtcbiAgICAgIHJldHVybiBjZWxsUmVuZGVyO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKGN1cnJlbnQsIGluZm8pIHtcbiAgICAgIHZhciBkYXRlID0gY3VycmVudDtcbiAgICAgIGlmIChkYXRlUmVuZGVyICYmIGluZm8udHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIHJldHVybiBkYXRlUmVuZGVyKGRhdGUsIGluZm8udG9kYXkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vbnRoQ2VsbFJlbmRlciAmJiBpbmZvLnR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgcmV0dXJuIG1vbnRoQ2VsbFJlbmRlcihkYXRlLCBpbmZvLmxvY2FsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5mby5vcmlnaW5Ob2RlO1xuICAgIH07XG4gIH0sIFtjZWxsUmVuZGVyLCBtb250aENlbGxSZW5kZXIsIGRhdGVSZW5kZXJdKTtcblxuICAvLyBDZWxsIHJlbmRlclxuICB2YXIgb25JbnRlcm5hbENlbGxSZW5kZXIgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZGF0ZSwgaW5mbykge1xuICAgIHJldHVybiBtZXJnZWRDZWxsUmVuZGVyKGRhdGUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgaW5mbyksIHt9LCB7XG4gICAgICByYW5nZTogcmFuZ2VcbiAgICB9KSk7XG4gIH0sIFttZXJnZWRDZWxsUmVuZGVyLCByYW5nZV0pO1xuICByZXR1cm4gb25JbnRlcm5hbENlbGxSZW5kZXI7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyB1c2VFdmVudCwgdXNlTWVyZ2VkU3RhdGUgfSBmcm9tICdyYy11dGlsJztcbmltcG9ydCByYWYgZnJvbSBcInJjLXV0aWwvZXMvcmFmXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFdpbGwgYmUgYHRydWVgIGltbWVkaWF0ZWx5IGZvciBuZXh0IGVmZmVjdC5cbiAqIEJ1dCB3aWxsIGJlIGBmYWxzZWAgZm9yIGEgZGVsYXkgb2YgZWZmZWN0LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VEZWxheVN0YXRlKHZhbHVlLCBkZWZhdWx0VmFsdWUsIG9uQ2hhbmdlKSB7XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShkZWZhdWx0VmFsdWUsIHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIHN0YXRlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRTdGF0ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIHZhciBuZXh0VmFsdWVSZWYgPSBSZWFjdC51c2VSZWYodmFsdWUpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFVwZGF0ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcmFmUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHZhciBjYW5jZWxSYWYgPSBmdW5jdGlvbiBjYW5jZWxSYWYoKSB7XG4gICAgcmFmLmNhbmNlbChyYWZSZWYuY3VycmVudCk7XG4gIH07XG4gIHZhciBkb1VwZGF0ZSA9IHVzZUV2ZW50KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRTdGF0ZShuZXh0VmFsdWVSZWYuY3VycmVudCk7XG4gICAgaWYgKG9uQ2hhbmdlICYmIHN0YXRlICE9PSBuZXh0VmFsdWVSZWYuY3VycmVudCkge1xuICAgICAgb25DaGFuZ2UobmV4dFZhbHVlUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgfSk7XG4gIHZhciB1cGRhdGVWYWx1ZSA9IHVzZUV2ZW50KGZ1bmN0aW9uIChuZXh0LCBpbW1lZGlhdGVseSkge1xuICAgIGNhbmNlbFJhZigpO1xuICAgIG5leHRWYWx1ZVJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICBpZiAobmV4dCB8fCBpbW1lZGlhdGVseSkge1xuICAgICAgZG9VcGRhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFmUmVmLmN1cnJlbnQgPSByYWYoZG9VcGRhdGUpO1xuICAgIH1cbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbmNlbFJhZjtcbiAgfSwgW10pO1xuICByZXR1cm4gW3N0YXRlLCB1cGRhdGVWYWx1ZV07XG59IiwiaW1wb3J0IHsgdXNlRXZlbnQgfSBmcm9tICdyYy11dGlsJztcbmltcG9ydCB7IGlzU2FtZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuLyoqXG4gKiBNZXJnZSBgZGlzYWJsZWREYXRlYCB3aXRoIGBtaW5EYXRlYCAmIGBtYXhEYXRlYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRGlzYWJsZWRCb3VuZGFyeShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBkaXNhYmxlZERhdGUsIG1pbkRhdGUsIG1heERhdGUpIHtcbiAgdmFyIG1lcmdlZERpc2FibGVkRGF0ZSA9IHVzZUV2ZW50KGZ1bmN0aW9uIChkYXRlLCBpbmZvKSB7XG4gICAgaWYgKGRpc2FibGVkRGF0ZSAmJiBkaXNhYmxlZERhdGUoZGF0ZSwgaW5mbykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobWluRGF0ZSAmJiBnZW5lcmF0ZUNvbmZpZy5pc0FmdGVyKG1pbkRhdGUsIGRhdGUpICYmICFpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgbWluRGF0ZSwgZGF0ZSwgaW5mby50eXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtYXhEYXRlICYmIGdlbmVyYXRlQ29uZmlnLmlzQWZ0ZXIoZGF0ZSwgbWF4RGF0ZSkgJiYgIWlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBtYXhEYXRlLCBkYXRlLCBpbmZvLnR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgcmV0dXJuIG1lcmdlZERpc2FibGVkRGF0ZTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRSb3dGb3JtYXQsIHRvQXJyYXkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VGaWVsZEZvcm1hdChwaWNrZXIsIGxvY2FsZSwgZm9ybWF0KSB7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmF3Rm9ybWF0ID0gZ2V0Um93Rm9ybWF0KHBpY2tlciwgbG9jYWxlLCBmb3JtYXQpO1xuICAgIHZhciBmb3JtYXRMaXN0ID0gdG9BcnJheShyYXdGb3JtYXQpO1xuICAgIHZhciBmaXJzdEZvcm1hdCA9IGZvcm1hdExpc3RbMF07XG4gICAgdmFyIG1hc2tGb3JtYXQgPSBfdHlwZW9mKGZpcnN0Rm9ybWF0KSA9PT0gJ29iamVjdCcgJiYgZmlyc3RGb3JtYXQudHlwZSA9PT0gJ21hc2snID8gZmlyc3RGb3JtYXQuZm9ybWF0IDogbnVsbDtcbiAgICByZXR1cm4gW1xuICAgIC8vIEZvcm1hdCBsaXN0XG4gICAgZm9ybWF0TGlzdC5tYXAoZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjb25maWcgPT09ICdmdW5jdGlvbicgPyBjb25maWcgOiBjb25maWcuZm9ybWF0O1xuICAgIH0pLFxuICAgIC8vIE1hc2sgRm9ybWF0XG4gICAgbWFza0Zvcm1hdF07XG4gIH0sIFtwaWNrZXIsIGxvY2FsZSwgZm9ybWF0XSk7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyBmaWxsSW5kZXggfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogVXNlZCB0byBjb250cm9sIGVhY2ggZmllbGRzIGludmFsaWRhdGUgc3RhdHVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZpZWxkc0ludmFsaWRhdGUoY2FsZW5kYXJWYWx1ZSwgaXNJbnZhbGlkYXRlRGF0ZSkge1xuICB2YXIgYWxsb3dFbXB0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogW107XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShbZmFsc2UsIGZhbHNlXSksXG4gICAgX1JlYWN0JHVzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VTdGF0ZSwgMiksXG4gICAgZmllbGRzSW52YWxpZGF0ZXMgPSBfUmVhY3QkdXNlU3RhdGUyWzBdLFxuICAgIHNldEZpZWxkc0ludmFsaWRhdGVzID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIG9uU2VsZWN0b3JJbnZhbGlkID0gZnVuY3Rpb24gb25TZWxlY3RvckludmFsaWQoaW52YWxpZCwgaW5kZXgpIHtcbiAgICBzZXRGaWVsZHNJbnZhbGlkYXRlcyhmdW5jdGlvbiAob3JpKSB7XG4gICAgICByZXR1cm4gZmlsbEluZGV4KG9yaSwgaW5kZXgsIGludmFsaWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgdGhlIFNlbGVjdG9yIElucHV0IHRvIG1hcmsgYXMgYGFyaWEtZGlzYWJsZWRgXG4gICAqL1xuICB2YXIgc3VibWl0SW52YWxpZGF0ZXMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmllbGRzSW52YWxpZGF0ZXMubWFwKGZ1bmN0aW9uIChpbnZhbGlkLCBpbmRleCkge1xuICAgICAgLy8gSWYgdHlwaW5nIGludmFsaWRhdGVcbiAgICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnQgPSBjYWxlbmRhclZhbHVlW2luZGV4XTtcblxuICAgICAgLy8gTm90IGNoZWNrIGlmIGFsbCBlbXB0eVxuICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IGFsbG93IGVtcHR5XG4gICAgICBpZiAoIWFsbG93RW1wdHlbaW5kZXhdICYmICFjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZhbGlkYXRlXG4gICAgICBpZiAoY3VycmVudCAmJiBpc0ludmFsaWRhdGVEYXRlKGN1cnJlbnQsIHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IGluZGV4XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfSwgW2NhbGVuZGFyVmFsdWUsIGZpZWxkc0ludmFsaWRhdGVzLCBpc0ludmFsaWRhdGVEYXRlLCBhbGxvd0VtcHR5XSk7XG4gIHJldHVybiBbc3VibWl0SW52YWxpZGF0ZXMsIG9uU2VsZWN0b3JJbnZhbGlkXTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTG9jYWxlIGZyb20gXCIuLi8uLi9ob29rcy91c2VMb2NhbGVcIjtcbmltcG9ydCB7IGZpbGxTaG93VGltZUNvbmZpZywgZ2V0VGltZVByb3BzIH0gZnJvbSBcIi4uLy4uL2hvb2tzL3VzZVRpbWVDb25maWdcIjtcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmltcG9ydCB7IGZpbGxDbGVhckljb24gfSBmcm9tIFwiLi4vU2VsZWN0b3IvaG9va3MvdXNlQ2xlYXJJY29uXCI7XG5pbXBvcnQgdXNlRGlzYWJsZWRCb3VuZGFyeSBmcm9tIFwiLi91c2VEaXNhYmxlZEJvdW5kYXJ5XCI7XG5pbXBvcnQgeyB1c2VGaWVsZEZvcm1hdCB9IGZyb20gXCIuL3VzZUZpZWxkRm9ybWF0XCI7XG5pbXBvcnQgdXNlSW5wdXRSZWFkT25seSBmcm9tIFwiLi91c2VJbnB1dFJlYWRPbmx5XCI7XG5pbXBvcnQgdXNlSW52YWxpZGF0ZSBmcm9tIFwiLi91c2VJbnZhbGlkYXRlXCI7XG5mdW5jdGlvbiB1c2VMaXN0KHZhbHVlKSB7XG4gIHZhciBmaWxsTW9kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciB2YWx1ZXMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGlzdCA9IHZhbHVlID8gdG9BcnJheSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICBpZiAoZmlsbE1vZGUgJiYgbGlzdCkge1xuICAgICAgbGlzdFsxXSA9IGxpc3RbMV0gfHwgbGlzdFswXTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFt2YWx1ZSwgZmlsbE1vZGVdKTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuLyoqXG4gKiBBbGlnbiB0aGUgb3V0ZXIgcHJvcHMgd2l0aCB1bmlxdWUgdHlwZWQgYW5kIGZpbGwgdW5kZWZpbmVkIHByb3BzLlxuICogVGhpcyBpcyBzaGFyZWQgd2l0aCBib3RoIFJhbmdlUGlja2VyIGFuZCBQaWNrZXIuIFRoaXMgd2lsbCBkbzpcbiAqIC0gQ29udmVydCBgdmFsdWVgICYgYGRlZmF1bHRWYWx1ZWAgdG8gYXJyYXlcbiAqIC0gaGFuZGxlIHRoZSBsZWdhY3kgcHJvcHMgZmlsbCBsaWtlIGBjbGVhckljb25gICsgYGFsbG93Q2xlYXJgID0gYGNsZWFySWNvbmBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRmlsbGVkUHJvcHMocHJvcHMsIHVwZGF0ZXIpIHtcbiAgdmFyIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIF9wcm9wcyRwaWNrZXIgPSBwcm9wcy5waWNrZXIsXG4gICAgcGlja2VyID0gX3Byb3BzJHBpY2tlciA9PT0gdm9pZCAwID8gJ2RhdGUnIDogX3Byb3BzJHBpY2tlcixcbiAgICBfcHJvcHMkcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIHByZWZpeENscyA9IF9wcm9wcyRwcmVmaXhDbHMgPT09IHZvaWQgMCA/ICdyYy1waWNrZXInIDogX3Byb3BzJHByZWZpeENscyxcbiAgICBfcHJvcHMkc3R5bGVzID0gcHJvcHMuc3R5bGVzLFxuICAgIHN0eWxlcyA9IF9wcm9wcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3Byb3BzJHN0eWxlcyxcbiAgICBfcHJvcHMkY2xhc3NOYW1lcyA9IHByb3BzLmNsYXNzTmFtZXMsXG4gICAgY2xhc3NOYW1lcyA9IF9wcm9wcyRjbGFzc05hbWVzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRjbGFzc05hbWVzLFxuICAgIF9wcm9wcyRvcmRlciA9IHByb3BzLm9yZGVyLFxuICAgIG9yZGVyID0gX3Byb3BzJG9yZGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3Byb3BzJG9yZGVyLFxuICAgIF9wcm9wcyRjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICBjb21wb25lbnRzID0gX3Byb3BzJGNvbXBvbmVudHMgPT09IHZvaWQgMCA/IHt9IDogX3Byb3BzJGNvbXBvbmVudHMsXG4gICAgaW5wdXRSZW5kZXIgPSBwcm9wcy5pbnB1dFJlbmRlcixcbiAgICBhbGxvd0NsZWFyID0gcHJvcHMuYWxsb3dDbGVhcixcbiAgICBjbGVhckljb24gPSBwcm9wcy5jbGVhckljb24sXG4gICAgbmVlZENvbmZpcm0gPSBwcm9wcy5uZWVkQ29uZmlybSxcbiAgICBtdWx0aXBsZSA9IHByb3BzLm11bHRpcGxlLFxuICAgIGZvcm1hdCA9IHByb3BzLmZvcm1hdCxcbiAgICBpbnB1dFJlYWRPbmx5ID0gcHJvcHMuaW5wdXRSZWFkT25seSxcbiAgICBkaXNhYmxlZERhdGUgPSBwcm9wcy5kaXNhYmxlZERhdGUsXG4gICAgbWluRGF0ZSA9IHByb3BzLm1pbkRhdGUsXG4gICAgbWF4RGF0ZSA9IHByb3BzLm1heERhdGUsXG4gICAgc2hvd1RpbWUgPSBwcm9wcy5zaG93VGltZSxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICBwaWNrZXJWYWx1ZSA9IHByb3BzLnBpY2tlclZhbHVlLFxuICAgIGRlZmF1bHRQaWNrZXJWYWx1ZSA9IHByb3BzLmRlZmF1bHRQaWNrZXJWYWx1ZTtcbiAgdmFyIHZhbHVlcyA9IHVzZUxpc3QodmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlcyA9IHVzZUxpc3QoZGVmYXVsdFZhbHVlKTtcbiAgdmFyIHBpY2tlclZhbHVlcyA9IHVzZUxpc3QocGlja2VyVmFsdWUpO1xuICB2YXIgZGVmYXVsdFBpY2tlclZhbHVlcyA9IHVzZUxpc3QoZGVmYXVsdFBpY2tlclZhbHVlKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUGlja2VyID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKiogQWxtb3N0IHNhbWUgYXMgYHBpY2tlcmAsIGJ1dCBhZGQgYGRhdGV0aW1lYCBmb3IgYGRhdGVgIHdpdGggYHNob3dUaW1lYCAqL1xuICB2YXIgaW50ZXJuYWxQaWNrZXIgPSBwaWNrZXIgPT09ICdkYXRlJyAmJiBzaG93VGltZSA/ICdkYXRldGltZScgOiBwaWNrZXI7XG5cbiAgLyoqIFRoZSBwaWNrZXIgaXMgYGRhdGV0aW1lYCBvciBgdGltZWAgKi9cbiAgdmFyIG11bHRpcGxlSW50ZXJhY3RpdmVQaWNrZXIgPSBpbnRlcm5hbFBpY2tlciA9PT0gJ3RpbWUnIHx8IGludGVybmFsUGlja2VyID09PSAnZGF0ZXRpbWUnO1xuICB2YXIgY29tcGxleFBpY2tlciA9IG11bHRpcGxlSW50ZXJhY3RpdmVQaWNrZXIgfHwgbXVsdGlwbGU7XG4gIHZhciBtZXJnZWROZWVkQ29uZmlybSA9IG5lZWRDb25maXJtICE9PSBudWxsICYmIG5lZWRDb25maXJtICE9PSB2b2lkIDAgPyBuZWVkQ29uZmlybSA6IG11bHRpcGxlSW50ZXJhY3RpdmVQaWNrZXI7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gVGltZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBdXRvIGBmb3JtYXRgIG5lZWQgdG8gY2hlY2sgYHNob3dUaW1lLnNob3dYWFhgIGZpcnN0LlxuICAvLyBBbmQgdGhlbiBtZXJnZSB0aGUgYGxvY2FsZWAgaW50byBgbWVyZ2VkU2hvd1RpbWVgLlxuICB2YXIgX2dldFRpbWVQcm9wcyA9IGdldFRpbWVQcm9wcyhwcm9wcyksXG4gICAgX2dldFRpbWVQcm9wczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0VGltZVByb3BzLCA0KSxcbiAgICB0aW1lUHJvcHMgPSBfZ2V0VGltZVByb3BzMlswXSxcbiAgICBsb2NhbGVUaW1lUHJvcHMgPSBfZ2V0VGltZVByb3BzMlsxXSxcbiAgICBzaG93VGltZUZvcm1hdCA9IF9nZXRUaW1lUHJvcHMyWzJdLFxuICAgIHByb3BGb3JtYXQgPSBfZ2V0VGltZVByb3BzMlszXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBMb2NhbGVzID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkTG9jYWxlID0gdXNlTG9jYWxlKGxvY2FsZSwgbG9jYWxlVGltZVByb3BzKTtcbiAgdmFyIG1lcmdlZFNob3dUaW1lID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZpbGxTaG93VGltZUNvbmZpZyhpbnRlcm5hbFBpY2tlciwgc2hvd1RpbWVGb3JtYXQsIHByb3BGb3JtYXQsIHRpbWVQcm9wcywgbWVyZ2VkTG9jYWxlKTtcbiAgfSwgW2ludGVybmFsUGlja2VyLCBzaG93VGltZUZvcm1hdCwgcHJvcEZvcm1hdCwgdGltZVByb3BzLCBtZXJnZWRMb2NhbGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBXYXJuaW5nID09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBwaWNrZXIgPT09ICd0aW1lJykge1xuICAgIGlmIChbJ2Rpc2FibGVkSG91cnMnLCAnZGlzYWJsZWRNaW51dGVzJywgJ2Rpc2FibGVkU2Vjb25kcyddLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHByb3BzW2tleV07XG4gICAgfSkpIHtcbiAgICAgIHdhcm5pbmcoZmFsc2UsIFwiJ2Rpc2FibGVkSG91cnMnLCAnZGlzYWJsZWRNaW51dGVzJywgJ2Rpc2FibGVkU2Vjb25kcycgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24sIHBsZWFzZSB1c2UgJ2Rpc2FibGVkVGltZScgaW5zdGVhZC5cIik7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFByb3BzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGZpbGxlZFByb3BzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgICBsb2NhbGU6IG1lcmdlZExvY2FsZSxcbiAgICAgIHBpY2tlcjogcGlja2VyLFxuICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICBjbGFzc05hbWVzOiBjbGFzc05hbWVzLFxuICAgICAgb3JkZXI6IG9yZGVyLFxuICAgICAgY29tcG9uZW50czogX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGlucHV0OiBpbnB1dFJlbmRlclxuICAgICAgfSwgY29tcG9uZW50cyksXG4gICAgICBjbGVhckljb246IGZpbGxDbGVhckljb24ocHJlZml4Q2xzLCBhbGxvd0NsZWFyLCBjbGVhckljb24pLFxuICAgICAgc2hvd1RpbWU6IG1lcmdlZFNob3dUaW1lLFxuICAgICAgdmFsdWU6IHZhbHVlcyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlcyxcbiAgICAgIHBpY2tlclZhbHVlOiBwaWNrZXJWYWx1ZXMsXG4gICAgICBkZWZhdWx0UGlja2VyVmFsdWU6IGRlZmF1bHRQaWNrZXJWYWx1ZXNcbiAgICB9LCB1cGRhdGVyID09PSBudWxsIHx8IHVwZGF0ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVwZGF0ZXIoKSk7XG4gIH0sIFtwcm9wc10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBGb3JtYXQgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlRmllbGRGb3JtYXQgPSB1c2VGaWVsZEZvcm1hdChpbnRlcm5hbFBpY2tlciwgbWVyZ2VkTG9jYWxlLCBmb3JtYXQpLFxuICAgIF91c2VGaWVsZEZvcm1hdDIgPSBfc2xpY2VkVG9BcnJheShfdXNlRmllbGRGb3JtYXQsIDIpLFxuICAgIGZvcm1hdExpc3QgPSBfdXNlRmllbGRGb3JtYXQyWzBdLFxuICAgIG1hc2tGb3JtYXQgPSBfdXNlRmllbGRGb3JtYXQyWzFdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IFJlYWRPbmx5ID09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRJbnB1dFJlYWRPbmx5ID0gdXNlSW5wdXRSZWFkT25seShmb3JtYXRMaXN0LCBpbnB1dFJlYWRPbmx5LCBtdWx0aXBsZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQm91bmRhcnkgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGRpc2FibGVkQm91bmRhcnlEYXRlID0gdXNlRGlzYWJsZWRCb3VuZGFyeShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBkaXNhYmxlZERhdGUsIG1pbkRhdGUsIG1heERhdGUpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gSW52YWxpZGF0ZSA9PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBpc0ludmFsaWRhdGVEYXRlID0gdXNlSW52YWxpZGF0ZShnZW5lcmF0ZUNvbmZpZywgcGlja2VyLCBkaXNhYmxlZEJvdW5kYXJ5RGF0ZSwgbWVyZ2VkU2hvd1RpbWUpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBNZXJnZWQgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRQcm9wcyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZpbGxlZFByb3BzKSwge30sIHtcbiAgICAgIG5lZWRDb25maXJtOiBtZXJnZWROZWVkQ29uZmlybSxcbiAgICAgIGlucHV0UmVhZE9ubHk6IG1lcmdlZElucHV0UmVhZE9ubHksXG4gICAgICBkaXNhYmxlZERhdGU6IGRpc2FibGVkQm91bmRhcnlEYXRlXG4gICAgfSk7XG4gIH0sIFtmaWxsZWRQcm9wcywgbWVyZ2VkTmVlZENvbmZpcm0sIG1lcmdlZElucHV0UmVhZE9ubHksIGRpc2FibGVkQm91bmRhcnlEYXRlXSk7XG4gIHJldHVybiBbbWVyZ2VkUHJvcHMsIGludGVybmFsUGlja2VyLCBjb21wbGV4UGlja2VyLCBmb3JtYXRMaXN0LCBtYXNrRm9ybWF0LCBpc0ludmFsaWRhdGVEYXRlXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJbnB1dFJlYWRPbmx5KGZvcm1hdExpc3QsIGlucHV0UmVhZE9ubHksIG11bHRpcGxlKSB7XG4gIGlmICh0eXBlb2YgZm9ybWF0TGlzdFswXSA9PT0gJ2Z1bmN0aW9uJyB8fCBtdWx0aXBsZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpbnB1dFJlYWRPbmx5O1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgeyB1c2VFdmVudCB9IGZyb20gJ3JjLXV0aWwnO1xuLyoqXG4gKiBDaGVjayBpZiBwcm92aWRlZCBkYXRlIGlzIHZhbGlkIGZvciB0aGUgYGRpc2FibGVkRGF0ZWAgJiBgc2hvd1RpbWUuZGlzYWJsZWRUaW1lYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlSW52YWxpZGF0ZShnZW5lcmF0ZUNvbmZpZywgcGlja2VyLCBkaXNhYmxlZERhdGUsIHNob3dUaW1lKSB7XG4gIC8vIENoZWNrIGRpc2FibGVkIGRhdGVcbiAgdmFyIGlzSW52YWxpZGF0ZSA9IHVzZUV2ZW50KGZ1bmN0aW9uIChkYXRlLCBpbmZvKSB7XG4gICAgdmFyIG91dHNpZGVJbmZvID0gX29iamVjdFNwcmVhZCh7XG4gICAgICB0eXBlOiBwaWNrZXJcbiAgICB9LCBpbmZvKTtcbiAgICBkZWxldGUgb3V0c2lkZUluZm8uYWN0aXZlSW5kZXg7XG4gICAgaWYgKFxuICAgIC8vIERhdGUgb2JqZWN0IGlzIGludmFsaWRcbiAgICAhZ2VuZXJhdGVDb25maWcuaXNWYWxpZGF0ZShkYXRlKSB8fFxuICAgIC8vIERhdGUgaXMgZGlzYWJsZWQgYnkgYGRpc2FibGVkRGF0ZWBcbiAgICBkaXNhYmxlZERhdGUgJiYgZGlzYWJsZWREYXRlKGRhdGUsIG91dHNpZGVJbmZvKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgocGlja2VyID09PSAnZGF0ZScgfHwgcGlja2VyID09PSAndGltZScpICYmIHNob3dUaW1lKSB7XG4gICAgICB2YXIgX3Nob3dUaW1lJGRpc2FibGVkVGltO1xuICAgICAgdmFyIHJhbmdlID0gaW5mbyAmJiBpbmZvLmFjdGl2ZUluZGV4ID09PSAxID8gJ2VuZCcgOiAnc3RhcnQnO1xuICAgICAgdmFyIF9yZWYgPSAoKF9zaG93VGltZSRkaXNhYmxlZFRpbSA9IHNob3dUaW1lLmRpc2FibGVkVGltZSkgPT09IG51bGwgfHwgX3Nob3dUaW1lJGRpc2FibGVkVGltID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc2hvd1RpbWUkZGlzYWJsZWRUaW0uY2FsbChzaG93VGltZSwgZGF0ZSwgcmFuZ2UsIHtcbiAgICAgICAgICBmcm9tOiBvdXRzaWRlSW5mby5mcm9tXG4gICAgICAgIH0pKSB8fCB7fSxcbiAgICAgICAgZGlzYWJsZWRIb3VycyA9IF9yZWYuZGlzYWJsZWRIb3VycyxcbiAgICAgICAgZGlzYWJsZWRNaW51dGVzID0gX3JlZi5kaXNhYmxlZE1pbnV0ZXMsXG4gICAgICAgIGRpc2FibGVkU2Vjb25kcyA9IF9yZWYuZGlzYWJsZWRTZWNvbmRzLFxuICAgICAgICBkaXNhYmxlZE1pbGxpc2Vjb25kcyA9IF9yZWYuZGlzYWJsZWRNaWxsaXNlY29uZHM7XG4gICAgICB2YXIgbGVnYWN5RGlzYWJsZWRIb3VycyA9IHNob3dUaW1lLmRpc2FibGVkSG91cnMsXG4gICAgICAgIGxlZ2FjeURpc2FibGVkTWludXRlcyA9IHNob3dUaW1lLmRpc2FibGVkTWludXRlcyxcbiAgICAgICAgbGVnYWN5RGlzYWJsZWRTZWNvbmRzID0gc2hvd1RpbWUuZGlzYWJsZWRTZWNvbmRzO1xuICAgICAgdmFyIG1lcmdlZERpc2FibGVkSG91cnMgPSBkaXNhYmxlZEhvdXJzIHx8IGxlZ2FjeURpc2FibGVkSG91cnM7XG4gICAgICB2YXIgbWVyZ2VkRGlzYWJsZWRNaW51dGVzID0gZGlzYWJsZWRNaW51dGVzIHx8IGxlZ2FjeURpc2FibGVkTWludXRlcztcbiAgICAgIHZhciBtZXJnZWREaXNhYmxlZFNlY29uZHMgPSBkaXNhYmxlZFNlY29uZHMgfHwgbGVnYWN5RGlzYWJsZWRTZWNvbmRzO1xuICAgICAgdmFyIGhvdXIgPSBnZW5lcmF0ZUNvbmZpZy5nZXRIb3VyKGRhdGUpO1xuICAgICAgdmFyIG1pbnV0ZSA9IGdlbmVyYXRlQ29uZmlnLmdldE1pbnV0ZShkYXRlKTtcbiAgICAgIHZhciBzZWNvbmQgPSBnZW5lcmF0ZUNvbmZpZy5nZXRTZWNvbmQoZGF0ZSk7XG4gICAgICB2YXIgbWlsbGlzZWNvbmQgPSBnZW5lcmF0ZUNvbmZpZy5nZXRNaWxsaXNlY29uZChkYXRlKTtcbiAgICAgIGlmIChtZXJnZWREaXNhYmxlZEhvdXJzICYmIG1lcmdlZERpc2FibGVkSG91cnMoKS5pbmNsdWRlcyhob3VyKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXJnZWREaXNhYmxlZE1pbnV0ZXMgJiYgbWVyZ2VkRGlzYWJsZWRNaW51dGVzKGhvdXIpLmluY2x1ZGVzKG1pbnV0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobWVyZ2VkRGlzYWJsZWRTZWNvbmRzICYmIG1lcmdlZERpc2FibGVkU2Vjb25kcyhob3VyLCBtaW51dGUpLmluY2x1ZGVzKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWRNaWxsaXNlY29uZHMgJiYgZGlzYWJsZWRNaWxsaXNlY29uZHMoaG91ciwgbWludXRlLCBzZWNvbmQpLmluY2x1ZGVzKG1pbGxpc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgcmV0dXJuIGlzSW52YWxpZGF0ZTtcbn0iLCJpbXBvcnQgeyB1c2VMYXlvdXRVcGRhdGVFZmZlY3QgfSBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCByYWYgZnJvbSBcInJjLXV0aWwvZXMvcmFmXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogVHJpZ2dlciBgY2FsbGJhY2tgIGltbWVkaWF0ZWx5IHdoZW4gYGNvbmRpdGlvbmAgaXMgYHRydWVgLlxuICogQnV0IHRyaWdnZXIgYGNhbGxiYWNrYCBpbiBuZXh0IGZyYW1lIHdoZW4gYGNvbmRpdGlvbmAgaXMgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTG9ja0VmZmVjdChjb25kaXRpb24sIGNhbGxiYWNrKSB7XG4gIHZhciBkZWxheUZyYW1lcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTtcbiAgdmFyIGNhbGxiYWNrUmVmID0gUmVhY3QudXNlUmVmKGNhbGxiYWNrKTtcbiAgY2FsbGJhY2tSZWYuY3VycmVudCA9IGNhbGxiYWNrO1xuICB1c2VMYXlvdXRVcGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIGNhbGxiYWNrUmVmLmN1cnJlbnQoY29uZGl0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlkID0gcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2tSZWYuY3VycmVudChjb25kaXRpb24pO1xuICAgICAgfSwgZGVsYXlGcmFtZXMpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmFmLmNhbmNlbChpZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NvbmRpdGlvbl0pO1xufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHVzZURlbGF5U3RhdGUgZnJvbSBcIi4vdXNlRGVsYXlTdGF0ZVwiO1xuXG4vKipcbiAqIENvbnRyb2wgdGhlIG9wZW4gc3RhdGUuXG4gKiBXaWxsIG5vdCBjbG9zZSBpZiBhY3RpdmVFbGVtZW50IGlzIG9uIHRoZSBwb3B1cC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3BlbihvcGVuLCBkZWZhdWx0T3Blbikge1xuICB2YXIgZGlzYWJsZWRMaXN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBbXTtcbiAgdmFyIG9uT3BlbkNoYW5nZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuICB2YXIgbWVyZ2VkT3BlbiA9IGRpc2FibGVkTGlzdC5ldmVyeShmdW5jdGlvbiAoZGlzYWJsZWQpIHtcbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH0pID8gZmFsc2UgOiBvcGVuO1xuXG4gIC8vIERlbGF5IGZvciBoYW5kbGUgdGhlIG9wZW4gc3RhdGUsIGluIGNhc2UgZmFzdCBzaGlmdCBmcm9tIGBvcGVuYCAtPiBgY2xvc2VgIC0+IGBvcGVuYFxuICAvLyBjb25zdCBbcmFmT3Blbiwgc2V0UmFmT3Blbl0gPSB1c2VMb2NrU3RhdGUob3BlbiwgZGVmYXVsdE9wZW4gfHwgZmFsc2UsIG9uT3BlbkNoYW5nZSk7XG4gIHZhciBfdXNlRGVsYXlTdGF0ZSA9IHVzZURlbGF5U3RhdGUobWVyZ2VkT3BlbiwgZGVmYXVsdE9wZW4gfHwgZmFsc2UsIG9uT3BlbkNoYW5nZSksXG4gICAgX3VzZURlbGF5U3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZURlbGF5U3RhdGUsIDIpLFxuICAgIHJhZk9wZW4gPSBfdXNlRGVsYXlTdGF0ZTJbMF0sXG4gICAgc2V0UmFmT3BlbiA9IF91c2VEZWxheVN0YXRlMlsxXTtcbiAgZnVuY3Rpb24gc2V0T3BlbihuZXh0KSB7XG4gICAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgaWYgKCFjb25maWcuaW5oZXJpdCB8fCByYWZPcGVuKSB7XG4gICAgICBzZXRSYWZPcGVuKG5leHQsIGNvbmZpZy5mb3JjZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbcmFmT3Blbiwgc2V0T3Blbl07XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUGlja2VyUmVmKHJlZikge1xuICB2YXIgc2VsZWN0b3JSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3NlbGVjdG9yUmVmJGN1cnJlbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IChfc2VsZWN0b3JSZWYkY3VycmVudCA9IHNlbGVjdG9yUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9zZWxlY3RvclJlZiRjdXJyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc2VsZWN0b3JSZWYkY3VycmVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9zZWxlY3RvclJlZiRjdXJyZW50MjtcbiAgICAgICAgKF9zZWxlY3RvclJlZiRjdXJyZW50MiA9IHNlbGVjdG9yUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9zZWxlY3RvclJlZiRjdXJyZW50MiA9PT0gdm9pZCAwIHx8IF9zZWxlY3RvclJlZiRjdXJyZW50Mi5mb2N1cyhvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICB2YXIgX3NlbGVjdG9yUmVmJGN1cnJlbnQzO1xuICAgICAgICAoX3NlbGVjdG9yUmVmJGN1cnJlbnQzID0gc2VsZWN0b3JSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3NlbGVjdG9yUmVmJGN1cnJlbnQzID09PSB2b2lkIDAgfHwgX3NlbGVjdG9yUmVmJGN1cnJlbnQzLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHNlbGVjdG9yUmVmO1xufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcInJjLXV0aWwvZXMvd2FybmluZ1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJlc2V0cyhwcmVzZXRzLCBsZWdhY3lSYW5nZXMpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcmVzZXRzKSB7XG4gICAgICByZXR1cm4gcHJlc2V0cztcbiAgICB9XG4gICAgaWYgKGxlZ2FjeVJhbmdlcykge1xuICAgICAgd2FybmluZyhmYWxzZSwgJ2ByYW5nZXNgIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYHByZXNldHNgIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobGVnYWN5UmFuZ2VzKS5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgICAgbGFiZWwgPSBfcmVmMlswXSxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sIFtwcmVzZXRzLCBsZWdhY3lSYW5nZXNdKTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VMb2NrRWZmZWN0IGZyb20gXCIuL3VzZUxvY2tFZmZlY3RcIjtcbi8qKlxuICogV2hlbiB1c2VyIGZpcnN0IGZvY3VzIG9uZSBpbnB1dCwgYW55IHN1Ym1pdCB3aWxsIHRyaWdnZXIgZm9jdXMgYW5vdGhlciBvbmUuXG4gKiBXaGVuIHNlY29uZCB0aW1lIGZvY3VzIG9uZSBpbnB1dCwgc3VibWl0IHdpbGwgbm90IHRyaWdnZXIgZm9jdXMgYWdhaW4uXG4gKiBXaGVuIGNsaWNrIG91dHNpZGUgdG8gY2xvc2UgdGhlIHBhbmVsLCB0cmlnZ2VyIGV2ZW50IGlmIGl0IGNhbiB0cmlnZ2VyIG9uQ2hhbmdlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSYW5nZUFjdGl2ZShkaXNhYmxlZCkge1xuICB2YXIgZW1wdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuICB2YXIgbWVyZ2VkT3BlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBhY3RpdmVJbmRleCA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0QWN0aXZlSW5kZXggPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSxcbiAgICBfUmVhY3QkdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlMywgMiksXG4gICAgZm9jdXNlZCA9IF9SZWFjdCR1c2VTdGF0ZTRbMF0sXG4gICAgc2V0Rm9jdXNlZCA9IF9SZWFjdCR1c2VTdGF0ZTRbMV07XG4gIHZhciBhY3RpdmVMaXN0UmVmID0gUmVhY3QudXNlUmVmKFtdKTtcbiAgdmFyIHN1Ym1pdEluZGV4UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB2YXIgbGFzdE9wZXJhdGlvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIHVwZGF0ZVN1Ym1pdEluZGV4ID0gZnVuY3Rpb24gdXBkYXRlU3VibWl0SW5kZXgoaW5kZXgpIHtcbiAgICBzdWJtaXRJbmRleFJlZi5jdXJyZW50ID0gaW5kZXg7XG4gIH07XG4gIHZhciBoYXNBY3RpdmVTdWJtaXRWYWx1ZSA9IGZ1bmN0aW9uIGhhc0FjdGl2ZVN1Ym1pdFZhbHVlKGluZGV4KSB7XG4gICAgcmV0dXJuIHN1Ym1pdEluZGV4UmVmLmN1cnJlbnQgPT09IGluZGV4O1xuICB9O1xuICB2YXIgdHJpZ2dlckZvY3VzID0gZnVuY3Rpb24gdHJpZ2dlckZvY3VzKG5leHRGb2N1cykge1xuICAgIHNldEZvY3VzZWQobmV4dEZvY3VzKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWNvcmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGxhc3RPcGVyYXRpb24gPSBmdW5jdGlvbiBsYXN0T3BlcmF0aW9uKHR5cGUpIHtcbiAgICBpZiAodHlwZSkge1xuICAgICAgbGFzdE9wZXJhdGlvblJlZi5jdXJyZW50ID0gdHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3RPcGVyYXRpb25SZWYuY3VycmVudDtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN0cmF0ZWd5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVHJpZ2dlciB3aGVuIGlucHV0IGVudGVyIG9yIGlucHV0IGJsdXIgb3IgcGFuZWwgY2xvc2VcbiAgdmFyIG5leHRBY3RpdmVJbmRleCA9IGZ1bmN0aW9uIG5leHRBY3RpdmVJbmRleChuZXh0VmFsdWUpIHtcbiAgICB2YXIgbGlzdCA9IGFjdGl2ZUxpc3RSZWYuY3VycmVudDtcbiAgICB2YXIgZmlsbGVkQWN0aXZlU2V0ID0gbmV3IFNldChsaXN0LmZpbHRlcihmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXh0VmFsdWVbaW5kZXhdIHx8IGVtcHR5W2luZGV4XTtcbiAgICB9KSk7XG4gICAgdmFyIG5leHRJbmRleCA9IGxpc3RbbGlzdC5sZW5ndGggLSAxXSA9PT0gMCA/IDEgOiAwO1xuICAgIGlmIChmaWxsZWRBY3RpdmVTZXQuc2l6ZSA+PSAyIHx8IGRpc2FibGVkW25leHRJbmRleF0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dEluZGV4O1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBXYWl0IGluIGNhc2UgaXQncyBmcm9tIHRoZSBjbGljayBvdXRzaWRlIHRvIGJsdXJcbiAgdXNlTG9ja0VmZmVjdChmb2N1c2VkIHx8IG1lcmdlZE9wZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWZvY3VzZWQpIHtcbiAgICAgIGFjdGl2ZUxpc3RSZWYuY3VycmVudCA9IFtdO1xuICAgICAgdXBkYXRlU3VibWl0SW5kZXgobnVsbCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgYWN0aXZlTGlzdFJlZi5jdXJyZW50LnB1c2goYWN0aXZlSW5kZXgpO1xuICAgIH1cbiAgfSwgW2ZvY3VzZWQsIGFjdGl2ZUluZGV4XSk7XG4gIHJldHVybiBbZm9jdXNlZCwgdHJpZ2dlckZvY3VzLCBsYXN0T3BlcmF0aW9uLCBhY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXgsIG5leHRBY3RpdmVJbmRleCwgYWN0aXZlTGlzdFJlZi5jdXJyZW50LCB1cGRhdGVTdWJtaXRJbmRleCwgaGFzQWN0aXZlU3VibWl0VmFsdWVdO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCB7IGlzU2FtZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IHsgZ2V0RnJvbURhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWlzY1V0aWxcIjtcblxuLyoqXG4gKiBSYW5nZVBpY2tlciBuZWVkIGFkZGl0aW9uYWwgbG9naWMgdG8gaGFuZGxlIHRoZSBgZGlzYWJsZWRgIGNhc2UuIGUuZy5cbiAqIFtkaXNhYmxlZCwgZW5hYmxlZF0gc2hvdWxkIGVuZCBkYXRlIG5vdCBiZWZvcmUgc3RhcnQgZGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSYW5nZURpc2FibGVkRGF0ZSh2YWx1ZXMsIGRpc2FibGVkLCBhY3RpdmVJbmRleExpc3QsIGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIGRpc2FibGVkRGF0ZSkge1xuICB2YXIgYWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleExpc3RbYWN0aXZlSW5kZXhMaXN0Lmxlbmd0aCAtIDFdO1xuICB2YXIgcmFuZ2VEaXNhYmxlZERhdGUgPSBmdW5jdGlvbiByYW5nZURpc2FibGVkRGF0ZShkYXRlLCBpbmZvKSB7XG4gICAgdmFyIF92YWx1ZXMgPSBfc2xpY2VkVG9BcnJheSh2YWx1ZXMsIDIpLFxuICAgICAgc3RhcnQgPSBfdmFsdWVzWzBdLFxuICAgICAgZW5kID0gX3ZhbHVlc1sxXTtcbiAgICB2YXIgbWVyZ2VkSW5mbyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgaW5mbyksIHt9LCB7XG4gICAgICBmcm9tOiBnZXRGcm9tRGF0ZSh2YWx1ZXMsIGFjdGl2ZUluZGV4TGlzdClcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRGlzYWJsZWQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFNob3VsZCBub3Qgc2VsZWN0IGRheXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAxICYmIGRpc2FibGVkWzBdICYmIHN0YXJ0ICYmXG4gICAgLy8gU2FtZSBkYXRlIGlzT0tcbiAgICAhaXNTYW1lKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIHN0YXJ0LCBkYXRlLCBtZXJnZWRJbmZvLnR5cGUpICYmXG4gICAgLy8gQmVmb3JlIHN0YXJ0IGRhdGVcbiAgICBnZW5lcmF0ZUNvbmZpZy5pc0FmdGVyKHN0YXJ0LCBkYXRlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBzZWxlY3QgZGF5cyBhZnRlciB0aGUgZW5kIGRhdGVcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IDAgJiYgZGlzYWJsZWRbMV0gJiYgZW5kICYmXG4gICAgLy8gU2FtZSBkYXRlIGlzT0tcbiAgICAhaXNTYW1lKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIGVuZCwgZGF0ZSwgbWVyZ2VkSW5mby50eXBlKSAmJlxuICAgIC8vIEFmdGVyIGVuZCBkYXRlXG4gICAgZ2VuZXJhdGVDb25maWcuaXNBZnRlcihkYXRlLCBlbmQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBPcmlnaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICByZXR1cm4gZGlzYWJsZWREYXRlID09PSBudWxsIHx8IGRpc2FibGVkRGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGlzYWJsZWREYXRlKGRhdGUsIG1lcmdlZEluZm8pO1xuICB9O1xuICByZXR1cm4gcmFuZ2VEaXNhYmxlZERhdGU7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyB1c2VNZXJnZWRTdGF0ZSB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tIFwicmMtdXRpbC9lcy9ob29rcy91c2VMYXlvdXRFZmZlY3RcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpbGxUaW1lLCBpc1NhbWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmV4cG9ydCBmdW5jdGlvbiBvZmZzZXRQYW5lbERhdGUoZ2VuZXJhdGVDb25maWcsIHBpY2tlciwgZGF0ZSwgb2Zmc2V0KSB7XG4gIHN3aXRjaCAocGlja2VyKSB7XG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuYWRkTW9udGgoZGF0ZSwgb2Zmc2V0KTtcbiAgICBjYXNlICdtb250aCc6XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuYWRkWWVhcihkYXRlLCBvZmZzZXQpO1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZFllYXIoZGF0ZSwgb2Zmc2V0ICogMTApO1xuICAgIGNhc2UgJ2RlY2FkZSc6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuYWRkWWVhcihkYXRlLCBvZmZzZXQgKiAxMDApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxudmFyIEVNUFRZX0xJU1QgPSBbXTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJhbmdlUGlja2VyVmFsdWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgY2FsZW5kYXJWYWx1ZSwgbW9kZXMsIG9wZW4sIGFjdGl2ZUluZGV4LCBwaWNrZXJNb2RlLCBtdWx0aXBsZVBhbmVsKSB7XG4gIHZhciBkZWZhdWx0UGlja2VyVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gOCAmJiBhcmd1bWVudHNbOF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s4XSA6IEVNUFRZX0xJU1Q7XG4gIHZhciBwaWNrZXJWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA5ICYmIGFyZ3VtZW50c1s5XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzldIDogRU1QVFlfTElTVDtcbiAgdmFyIHRpbWVEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMTAgJiYgYXJndW1lbnRzWzEwXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzEwXSA6IEVNUFRZX0xJU1Q7XG4gIHZhciBvblBpY2tlclZhbHVlQ2hhbmdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDExID8gYXJndW1lbnRzWzExXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1pbkRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMTIgPyBhcmd1bWVudHNbMTJdIDogdW5kZWZpbmVkO1xuICB2YXIgbWF4RGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxMyA/IGFyZ3VtZW50c1sxM10gOiB1bmRlZmluZWQ7XG4gIHZhciBpc1RpbWVQaWNrZXIgPSBwaWNrZXJNb2RlID09PSAndGltZSc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEFjdGl2ZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gYGFjdGl2ZUluZGV4YCBtdXN0IGJlIHZhbGlkIHRvIGF2b2lkIGdldHRpbmcgZW1wdHkgYHBpY2tlclZhbHVlYFxuICB2YXIgbWVyZ2VkQWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCB8fCAwO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBQaWNrZXIgVmFsdWUgPT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBnZXREZWZhdWx0UGlja2VyVmFsdWUgPSBmdW5jdGlvbiBnZXREZWZhdWx0UGlja2VyVmFsdWUoaW5kZXgpIHtcbiAgICB2YXIgbm93ID0gZ2VuZXJhdGVDb25maWcuZ2V0Tm93KCk7XG4gICAgaWYgKGlzVGltZVBpY2tlcikge1xuICAgICAgbm93ID0gZmlsbFRpbWUoZ2VuZXJhdGVDb25maWcsIG5vdyk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0UGlja2VyVmFsdWVbaW5kZXhdIHx8IGNhbGVuZGFyVmFsdWVbaW5kZXhdIHx8IG5vdztcbiAgfTtcblxuICAvLyBBbGlnbiBgcGlja2VyVmFsdWVgIHdpdGggYHNob3dUaW1lLmRlZmF1bHRWYWx1ZWBcbiAgdmFyIF9waWNrZXJWYWx1ZSA9IF9zbGljZWRUb0FycmF5KHBpY2tlclZhbHVlLCAyKSxcbiAgICBzdGFydFBpY2tlclZhbHVlID0gX3BpY2tlclZhbHVlWzBdLFxuICAgIGVuZFBpY2tlclZhbHVlID0gX3BpY2tlclZhbHVlWzFdO1xuXG4gIC8vIFBpY2tlclZhbHVlIHN0YXRlXG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVmYXVsdFBpY2tlclZhbHVlKDApO1xuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBzdGFydFBpY2tlclZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZSwgMiksXG4gICAgbWVyZ2VkU3RhcnRQaWNrZXJWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMF0sXG4gICAgc2V0U3RhcnRQaWNrZXJWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTJbMV07XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUzID0gdXNlTWVyZ2VkU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldERlZmF1bHRQaWNrZXJWYWx1ZSgxKTtcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogZW5kUGlja2VyVmFsdWVcbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlMywgMiksXG4gICAgbWVyZ2VkRW5kUGlja2VyVmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldEVuZFBpY2tlclZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFsxXTtcblxuICAvLyBDdXJyZW50IFBpY2tlclZhbHVlXG4gIHZhciBjdXJyZW50UGlja2VyVmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IFttZXJnZWRTdGFydFBpY2tlclZhbHVlLCBtZXJnZWRFbmRQaWNrZXJWYWx1ZV1bbWVyZ2VkQWN0aXZlSW5kZXhdO1xuXG4gICAgLy8gTWVyZ2UgdGhlIGBzaG93VGltZS5kZWZhdWx0VmFsdWVgIGludG8gYHBpY2tlclZhbHVlYFxuICAgIHJldHVybiBpc1RpbWVQaWNrZXIgPyBjdXJyZW50IDogZmlsbFRpbWUoZ2VuZXJhdGVDb25maWcsIGN1cnJlbnQsIHRpbWVEZWZhdWx0VmFsdWVbbWVyZ2VkQWN0aXZlSW5kZXhdKTtcbiAgfSwgW2lzVGltZVBpY2tlciwgbWVyZ2VkU3RhcnRQaWNrZXJWYWx1ZSwgbWVyZ2VkRW5kUGlja2VyVmFsdWUsIG1lcmdlZEFjdGl2ZUluZGV4LCBnZW5lcmF0ZUNvbmZpZywgdGltZURlZmF1bHRWYWx1ZV0pO1xuICB2YXIgc2V0Q3VycmVudFBpY2tlclZhbHVlID0gZnVuY3Rpb24gc2V0Q3VycmVudFBpY2tlclZhbHVlKG5leHRQaWNrZXJWYWx1ZSkge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdwYW5lbCc7XG4gICAgdmFyIHVwZGF0ZXIgPSBbc2V0U3RhcnRQaWNrZXJWYWx1ZSwgc2V0RW5kUGlja2VyVmFsdWVdW21lcmdlZEFjdGl2ZUluZGV4XTtcbiAgICB1cGRhdGVyKG5leHRQaWNrZXJWYWx1ZSk7XG4gICAgdmFyIGNsb25lID0gW21lcmdlZFN0YXJ0UGlja2VyVmFsdWUsIG1lcmdlZEVuZFBpY2tlclZhbHVlXTtcbiAgICBjbG9uZVttZXJnZWRBY3RpdmVJbmRleF0gPSBuZXh0UGlja2VyVmFsdWU7XG4gICAgaWYgKG9uUGlja2VyVmFsdWVDaGFuZ2UgJiYgKCFpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgbWVyZ2VkU3RhcnRQaWNrZXJWYWx1ZSwgY2xvbmVbMF0sIHBpY2tlck1vZGUpIHx8ICFpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgbWVyZ2VkRW5kUGlja2VyVmFsdWUsIGNsb25lWzFdLCBwaWNrZXJNb2RlKSkpIHtcbiAgICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UoY2xvbmUsIHtcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIHJhbmdlOiBtZXJnZWRBY3RpdmVJbmRleCA9PT0gMSA/ICdlbmQnIDogJ3N0YXJ0JyxcbiAgICAgICAgbW9kZTogbW9kZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogRW5kRGF0ZSBwaWNrZXJWYWx1ZSBpcyBsaXR0bGUgZGlmZmVyZW50LiBJdCBzaG91bGQgYmU6XG4gICAqIC0gSWYgZGF0ZSBwaWNrZXIgKHdpdGhvdXQgdGltZSksIGVuZERhdGUgaXMgbm90IHNhbWUgeWVhciAmIG1vbnRoIGFzIHN0YXJ0RGF0ZVxuICAgKiAgIC0gcGlja2VyVmFsdWUgbWludXMgb25lIG1vbnRoXG4gICAqIC0gRWxzZSBwYXNzIGRpcmVjdGx5XG4gICAqL1xuICB2YXIgZ2V0RW5kRGF0ZVBpY2tlclZhbHVlID0gZnVuY3Rpb24gZ2V0RW5kRGF0ZVBpY2tlclZhbHVlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkge1xuICAgIGlmIChtdWx0aXBsZVBhbmVsKSB7XG4gICAgICAvLyBCYXNpYyBvZmZzZXRcbiAgICAgIHZhciBTQU1FX0NIRUNLRVIgPSB7XG4gICAgICAgIGRhdGU6ICdtb250aCcsXG4gICAgICAgIHdlZWs6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAneWVhcicsXG4gICAgICAgIHF1YXJ0ZXI6ICd5ZWFyJ1xuICAgICAgfTtcbiAgICAgIHZhciBtb2RlID0gU0FNRV9DSEVDS0VSW3BpY2tlck1vZGVdO1xuICAgICAgaWYgKG1vZGUgJiYgIWlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBzdGFydERhdGUsIGVuZERhdGUsIG1vZGUpKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXRQYW5lbERhdGUoZ2VuZXJhdGVDb25maWcsIHBpY2tlck1vZGUsIGVuZERhdGUsIC0xKTtcbiAgICAgIH1cblxuICAgICAgLy8gWWVhciBvZmZzZXRcbiAgICAgIGlmIChwaWNrZXJNb2RlID09PSAneWVhcicgJiYgc3RhcnREYXRlKSB7XG4gICAgICAgIHZhciBzcmNZZWFyID0gTWF0aC5mbG9vcihnZW5lcmF0ZUNvbmZpZy5nZXRZZWFyKHN0YXJ0RGF0ZSkgLyAxMCk7XG4gICAgICAgIHZhciB0Z3RZZWFyID0gTWF0aC5mbG9vcihnZW5lcmF0ZUNvbmZpZy5nZXRZZWFyKGVuZERhdGUpIC8gMTApO1xuICAgICAgICBpZiAoc3JjWWVhciAhPT0gdGd0WWVhcikge1xuICAgICAgICAgIHJldHVybiBvZmZzZXRQYW5lbERhdGUoZ2VuZXJhdGVDb25maWcsIHBpY2tlck1vZGUsIGVuZERhdGUsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW5kRGF0ZTtcbiAgfTtcblxuICAvLyA+Pj4gV2hlbiBzd2l0Y2ggZmllbGQsIHJlc2V0IHRoZSBwaWNrZXIgdmFsdWUgYXMgcHJldiBmaWVsZCBwaWNrZXIgdmFsdWVcbiAgdmFyIHByZXZBY3RpdmVJbmRleFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaWYgKCFkZWZhdWx0UGlja2VyVmFsdWVbbWVyZ2VkQWN0aXZlSW5kZXhdKSB7XG4gICAgICAgIHZhciBuZXh0UGlja2VyVmFsdWUgPSBpc1RpbWVQaWNrZXIgPyBudWxsIDogZ2VuZXJhdGVDb25maWcuZ2V0Tm93KCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIDEuIElmIGhhcyBwcmV2QWN0aXZlSW5kZXgsIHVzZSBpdCB0byBhdm9pZCBwYW5lbCBqdW1wXG4gICAgICAgICAqIDIuIElmIGN1cnJlbnQgZmllbGQgaGFzIHZhbHVlXG4gICAgICAgICAqICAgIC0gSWYgYGFjdGl2ZUluZGV4YCBpcyAxIGFuZCBgY2FsZW5kYXJWYWx1ZVswXWAgaXMgbm90IHNhbWUgcGFuZWwgYXMgYGNhbGVuZGFyVmFsdWVbMV1gLFxuICAgICAgICAgKiAgICAgIG9mZnNldCBgY2FsZW5kYXJWYWx1ZVsxXWAgYW5kIHNldCBpdFxuICAgICAgICAgKiAgICAtIEVsc2UgdXNlIGBjYWxlbmRhclZhbHVlW2FjdGl2ZUluZGV4XWBcbiAgICAgICAgICogMy4gSWYgY3VycmVudCBmaWVsZCBoYXMgbm8gdmFsdWUgYnV0IGFub3RoZXIgZmllbGQgaGFzIHZhbHVlLCB1c2UgYW5vdGhlciBmaWVsZCB2YWx1ZVxuICAgICAgICAgKiA0LiBFbHNlIHVzZSBub3cgKG5vdCBhbnkgYGNhbGVuZGFyVmFsdWVgIGNhbiByZWYpXG4gICAgICAgICAqL1xuXG4gICAgICAgIGlmIChwcmV2QWN0aXZlSW5kZXhSZWYuY3VycmVudCAhPT0gbnVsbCAmJiBwcmV2QWN0aXZlSW5kZXhSZWYuY3VycmVudCAhPT0gbWVyZ2VkQWN0aXZlSW5kZXgpIHtcbiAgICAgICAgICAvLyBJZiBmcm9tIGFub3RoZXIgZmllbGQsIG5vdCBqdW1wIHBpY2tlciB2YWx1ZVxuICAgICAgICAgIG5leHRQaWNrZXJWYWx1ZSA9IFttZXJnZWRTdGFydFBpY2tlclZhbHVlLCBtZXJnZWRFbmRQaWNrZXJWYWx1ZV1bbWVyZ2VkQWN0aXZlSW5kZXggXiAxXTtcbiAgICAgICAgfSBlbHNlIGlmIChjYWxlbmRhclZhbHVlW21lcmdlZEFjdGl2ZUluZGV4XSkge1xuICAgICAgICAgIC8vIEN1cnJlbnQgZmllbGQgaGFzIHZhbHVlXG4gICAgICAgICAgbmV4dFBpY2tlclZhbHVlID0gbWVyZ2VkQWN0aXZlSW5kZXggPT09IDAgPyBjYWxlbmRhclZhbHVlWzBdIDogZ2V0RW5kRGF0ZVBpY2tlclZhbHVlKGNhbGVuZGFyVmFsdWVbMF0sIGNhbGVuZGFyVmFsdWVbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNhbGVuZGFyVmFsdWVbbWVyZ2VkQWN0aXZlSW5kZXggXiAxXSkge1xuICAgICAgICAgIC8vIEN1cnJlbnQgZmllbGQgaGFzIG5vIHZhbHVlIGJ1dCBhbm90aGVyIGZpZWxkIGhhcyB2YWx1ZVxuICAgICAgICAgIG5leHRQaWNrZXJWYWx1ZSA9IGNhbGVuZGFyVmFsdWVbbWVyZ2VkQWN0aXZlSW5kZXggXiAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgc3luYyB3aGVuIGhhcyB2YWx1ZSwgdGhpcyB3aWxsIHN5bmMgaW4gdGhlIGBtaW4tbWF4YCBsb2dpY1xuICAgICAgICBpZiAobmV4dFBpY2tlclZhbHVlKSB7XG4gICAgICAgICAgLy8gbmV4dFBpY2tlclZhbHVlIDwgbWluRGF0ZVxuICAgICAgICAgIGlmIChtaW5EYXRlICYmIGdlbmVyYXRlQ29uZmlnLmlzQWZ0ZXIobWluRGF0ZSwgbmV4dFBpY2tlclZhbHVlKSkge1xuICAgICAgICAgICAgbmV4dFBpY2tlclZhbHVlID0gbWluRGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBtYXhEYXRlIDwgbmV4dFBpY2tlclZhbHVlXG4gICAgICAgICAgdmFyIG9mZnNldFBpY2tlclZhbHVlID0gbXVsdGlwbGVQYW5lbCA/IG9mZnNldFBhbmVsRGF0ZShnZW5lcmF0ZUNvbmZpZywgcGlja2VyTW9kZSwgbmV4dFBpY2tlclZhbHVlLCAxKSA6IG5leHRQaWNrZXJWYWx1ZTtcbiAgICAgICAgICBpZiAobWF4RGF0ZSAmJiBnZW5lcmF0ZUNvbmZpZy5pc0FmdGVyKG9mZnNldFBpY2tlclZhbHVlLCBtYXhEYXRlKSkge1xuICAgICAgICAgICAgbmV4dFBpY2tlclZhbHVlID0gbXVsdGlwbGVQYW5lbCA/IG9mZnNldFBhbmVsRGF0ZShnZW5lcmF0ZUNvbmZpZywgcGlja2VyTW9kZSwgbWF4RGF0ZSwgLTEpIDogbWF4RGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0Q3VycmVudFBpY2tlclZhbHVlKG5leHRQaWNrZXJWYWx1ZSwgJ3Jlc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtvcGVuLCBtZXJnZWRBY3RpdmVJbmRleCwgY2FsZW5kYXJWYWx1ZVttZXJnZWRBY3RpdmVJbmRleF1dKTtcblxuICAvLyA+Pj4gUmVzZXQgcHJldkFjdGl2ZUluZGV4IHdoZW4gcGFuZWwgY2xvc2VkXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHByZXZBY3RpdmVJbmRleFJlZi5jdXJyZW50ID0gbWVyZ2VkQWN0aXZlSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXZBY3RpdmVJbmRleFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtvcGVuLCBtZXJnZWRBY3RpdmVJbmRleF0pO1xuXG4gIC8vID4+PiBkZWZhdWx0UGlja2VyVmFsdWU6IFJlc3luYyB0byBgZGVmYXVsdFBpY2tlclZhbHVlYCBmb3IgZWFjaCBwYW5lbCBmb2N1c2VkXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG9wZW4gJiYgZGVmYXVsdFBpY2tlclZhbHVlKSB7XG4gICAgICBpZiAoZGVmYXVsdFBpY2tlclZhbHVlW21lcmdlZEFjdGl2ZUluZGV4XSkge1xuICAgICAgICBzZXRDdXJyZW50UGlja2VyVmFsdWUoZGVmYXVsdFBpY2tlclZhbHVlW21lcmdlZEFjdGl2ZUluZGV4XSwgJ3Jlc2V0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbb3BlbiwgbWVyZ2VkQWN0aXZlSW5kZXhdKTtcbiAgcmV0dXJuIFtjdXJyZW50UGlja2VyVmFsdWUsIHNldEN1cnJlbnRQaWNrZXJWYWx1ZV07XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IHsgdXNlRXZlbnQsIHVzZU1lcmdlZFN0YXRlIH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU3luY1N0YXRlIGZyb20gXCIuLi8uLi9ob29rcy91c2VTeW5jU3RhdGVcIjtcbmltcG9ydCB7IGZvcm1hdFZhbHVlLCBpc1NhbWUsIGlzU2FtZVRpbWVzdGFtcCB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IHsgZmlsbEluZGV4IH0gZnJvbSBcIi4uLy4uL3V0aWxzL21pc2NVdGlsXCI7XG5pbXBvcnQgdXNlTG9ja0VmZmVjdCBmcm9tIFwiLi91c2VMb2NrRWZmZWN0XCI7XG52YXIgRU1QVFlfVkFMVUUgPSBbXTtcblxuLy8gU3VibWl0IExvZ2ljOlxuLy8gKiDinIUgVmFsdWU6XG4vLyAgICAqIG1lcmdlZCB2YWx1ZSB1c2luZyBjb250cm9sbGVkIHZhbHVlLCBpZiBub3QsIHVzZSBzdGF0ZVZhbHVlXG4vLyAgICAqIFdoZW4gbWVyZ2VkIHZhbHVlIGNoYW5nZSwgWzFdIHJlc3luYyBjYWxlbmRhciB2YWx1ZSBhbmQgc3VibWl0IHZhbHVlXG4vLyAqIOKchSBDYWxlbmRlciBWYWx1ZTpcbi8vICAgICog8J+SuyBXaGVuIHVzZXIgdHlwaW5nIGlzIHZhbGlkYXRlLCBjaGFuZ2UgdGhlIGNhbGVuZGFyIHZhbHVlXG4vLyAgICAqIPCfjIUgV2hlbiB1c2VyIGNsaWNrIG9uIHRoZSBwYW5lbCwgY2hhbmdlIHRoZSBjYWxlbmRhciB2YWx1ZVxuLy8gKiBTdWJtaXQgVmFsdWU6XG4vLyAgICAqIPCfkrsgV2hlbiB1c2VyIGJsdXIgdGhlIGlucHV0LCBmbHVzaCBjYWxlbmRhciB2YWx1ZSB0byBzdWJtaXQgdmFsdWVcbi8vICAgICog8J+MhSBXaGVuIHVzZXIgY2xpY2sgb24gdGhlIHBhbmVsIGlzIG5vIG5lZWRDb25maXJtLCBmbHVzaCBjYWxlbmRhciB2YWx1ZSB0byBzdWJtaXQgdmFsdWVcbi8vICAgICog8J+MhSBXaGVuIHVzZXIgY2xpY2sgb24gdGhlIHBhbmVsIGlzIG5lZWRDb25maXJtIGFuZCBjbGljayBPSywgZmx1c2ggY2FsZW5kYXIgdmFsdWUgdG8gc3VibWl0IHZhbHVlXG4vLyAqIEJsdXIgbG9naWMgJiBjbG9zZSBsb2dpYzpcbi8vICAgICog4pyFIEZvciB2YWx1ZSwgYWx3YXlzIHRyeSBmbHVzaCBzdWJtaXRcbi8vICAgICog4pyFIElmIGBuZWVkQ29uZmlybWAsIHJlc2V0IGFzIFsxXVxuLy8gICAgKiBFbHNlIChgIW5lZWRDb25maXJtYClcbi8vICAgICAgKiBJZiBoYXMgYW5vdGhlciBpbmRleCBmaWVsZCwgYWN0aXZlIGFub3RoZXIgaW5kZXhcbi8vICog4pyFIEZsdXNoIHN1Ym1pdDpcbi8vICAgICogSWYgYWxsIHRoZSBzdGFydCAmIGVuZCBmaWVsZCBpcyBjb25maXJtZWQgb3IgYWxsIGJsdXIgb3IgcGFuZWwgY2xvc2VkXG4vLyAgICAqIFVwZGF0ZSBgbmVlZFN1Ym1pdGAgbWFyayB0byB0cnVlXG4vLyAgICAqIHRyaWdnZXIgb25DaGFuZ2UgYnkgYG5lZWRTdWJtaXRgIGFuZCB1cGRhdGUgc3RhdGVWYWx1ZVxuXG5mdW5jdGlvbiB1c2VVdGlsKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIGZvcm1hdExpc3QpIHtcbiAgdmFyIGdldERhdGVUZXh0cyA9IGZ1bmN0aW9uIGdldERhdGVUZXh0cyhkYXRlcykge1xuICAgIHJldHVybiBkYXRlcy5tYXAoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRWYWx1ZShkYXRlLCB7XG4gICAgICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZyxcbiAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0TGlzdFswXVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIHZhciBpc1NhbWVEYXRlcyA9IGZ1bmN0aW9uIGlzU2FtZURhdGVzKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgdmFyIG1heExlbiA9IE1hdGgubWF4KHNvdXJjZS5sZW5ndGgsIHRhcmdldC5sZW5ndGgpO1xuICAgIHZhciBkaWZmSW5kZXggPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExlbjsgaSArPSAxKSB7XG4gICAgICB2YXIgcHJldiA9IHNvdXJjZVtpXSB8fCBudWxsO1xuICAgICAgdmFyIG5leHQgPSB0YXJnZXRbaV0gfHwgbnVsbDtcbiAgICAgIGlmIChwcmV2ICE9PSBuZXh0ICYmICFpc1NhbWVUaW1lc3RhbXAoZ2VuZXJhdGVDb25maWcsIHByZXYsIG5leHQpKSB7XG4gICAgICAgIGRpZmZJbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW2RpZmZJbmRleCA8IDAsIGRpZmZJbmRleCAhPT0gMF07XG4gIH07XG4gIHJldHVybiBbZ2V0RGF0ZVRleHRzLCBpc1NhbWVEYXRlc107XG59XG5mdW5jdGlvbiBvcmRlckRhdGVzKGRhdGVzLCBnZW5lcmF0ZUNvbmZpZykge1xuICByZXR1cm4gX3RvQ29uc3VtYWJsZUFycmF5KGRhdGVzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmlzQWZ0ZXIoYSwgYikgPyAxIDogLTE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVzZWQgZm9yIGludGVybmFsIHZhbHVlIG1hbmFnZW1lbnQuXG4gKiBJdCBzaG91bGQgYWx3YXlzIHVzZSBgbWVyZ2VkVmFsdWVgIGluIHJlbmRlciBsb2dpY1xuICovXG5mdW5jdGlvbiB1c2VDYWxlbmRhclZhbHVlKG1lcmdlZFZhbHVlKSB7XG4gIHZhciBfdXNlU3luY1N0YXRlID0gdXNlU3luY1N0YXRlKG1lcmdlZFZhbHVlKSxcbiAgICBfdXNlU3luY1N0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTeW5jU3RhdGUsIDIpLFxuICAgIGNhbGVuZGFyVmFsdWUgPSBfdXNlU3luY1N0YXRlMlswXSxcbiAgICBzZXRDYWxlbmRhclZhbHVlID0gX3VzZVN5bmNTdGF0ZTJbMV07XG5cbiAgLyoqIFN5bmMgY2FsZW5kYXJWYWx1ZSAmIHN1Ym1pdFZhbHVlIGJhY2sgd2l0aCB2YWx1ZSAqL1xuICB2YXIgc3luY1dpdGhWYWx1ZSA9IHVzZUV2ZW50KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRDYWxlbmRhclZhbHVlKG1lcmdlZFZhbHVlKTtcbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc3luY1dpdGhWYWx1ZSgpO1xuICB9LCBbbWVyZ2VkVmFsdWVdKTtcbiAgcmV0dXJuIFtjYWxlbmRhclZhbHVlLCBzZXRDYWxlbmRhclZhbHVlXTtcbn1cblxuLyoqXG4gKiBDb250cm9sIHRoZSBpbnRlcm5hbCBgdmFsdWVgIGFsaWduIHdpdGggcHJvcCBgdmFsdWVgIGFuZCBwcm92aWRlIGEgdGVtcCBgY2FsZW5kYXJWYWx1ZWAgZm9yIHVpLlxuICogYGNhbGVuZGFyVmFsdWVgIHdpbGwgYmUgcmVzZXQgd2hlbiBibHVyICYgZm9jdXMgJiBvcGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSW5uZXJWYWx1ZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBmb3JtYXRMaXN0LCAvKiogVXNlZCBmb3IgUmFuZ2VQaWNrZXIuIGB0cnVlYCBtZWFucyBbRGF0ZVR5cGUsIERhdGVUeXBlXSBvciB3aWxsIGJlIERhdGVUeXBlW10gKi9cbnJhbmdlVmFsdWUsXG4vKipcbiAqIFRyaWdnZXIgb3JkZXIgd2hlbiB0cmlnZ2VyIGNhbGVuZGFyIHZhbHVlIGNoYW5nZS5cbiAqIFRoaXMgc2hvdWxkIG9ubHkgdXNlZCBpbiBTaW5nbGVQaWNrZXIgd2l0aCBgbXVsdGlwbGVgIG1vZGUuXG4gKiBTbyB3aGVuIGByYW5nZVZhbHVlYCBpcyBgdHJ1ZWAsIG9yZGVyIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xub3JkZXIsIGRlZmF1bHRWYWx1ZSwgdmFsdWUsIG9uQ2FsZW5kYXJDaGFuZ2UsIG9uT2spIHtcbiAgLy8gVGhpcyBpcyB0aGUgcm9vdCB2YWx1ZSB3aGljaCB3aWxsIHN5bmMgd2l0aCBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB2YWx1ZVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUoZGVmYXVsdFZhbHVlLCB7XG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlLCAyKSxcbiAgICBpbm5lclZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRJbm5lclZhbHVlID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcbiAgdmFyIG1lcmdlZFZhbHVlID0gaW5uZXJWYWx1ZSB8fCBFTVBUWV9WQUxVRTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IElubmVyIFZhbHVlcyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlQ2FsZW5kYXJWYWx1ZSA9IHVzZUNhbGVuZGFyVmFsdWUobWVyZ2VkVmFsdWUpLFxuICAgIF91c2VDYWxlbmRhclZhbHVlMiA9IF9zbGljZWRUb0FycmF5KF91c2VDYWxlbmRhclZhbHVlLCAyKSxcbiAgICBjYWxlbmRhclZhbHVlID0gX3VzZUNhbGVuZGFyVmFsdWUyWzBdLFxuICAgIHNldENhbGVuZGFyVmFsdWUgPSBfdXNlQ2FsZW5kYXJWYWx1ZTJbMV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVV0aWwgPSB1c2VVdGlsKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIGZvcm1hdExpc3QpLFxuICAgIF91c2VVdGlsMiA9IF9zbGljZWRUb0FycmF5KF91c2VVdGlsLCAyKSxcbiAgICBnZXREYXRlVGV4dHMgPSBfdXNlVXRpbDJbMF0sXG4gICAgaXNTYW1lRGF0ZXMgPSBfdXNlVXRpbDJbMV07XG4gIHZhciB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UgPSB1c2VFdmVudChmdW5jdGlvbiAobmV4dENhbGVuZGFyVmFsdWVzKSB7XG4gICAgdmFyIGNsb25lID0gX3RvQ29uc3VtYWJsZUFycmF5KG5leHRDYWxlbmRhclZhbHVlcyk7XG4gICAgaWYgKHJhbmdlVmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSArPSAxKSB7XG4gICAgICAgIGNsb25lW2ldID0gY2xvbmVbaV0gfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9yZGVyKSB7XG4gICAgICBjbG9uZSA9IG9yZGVyRGF0ZXMoY2xvbmUuZmlsdGVyKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfSksIGdlbmVyYXRlQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbWVyZ2VkIHZhbHVlXG4gICAgdmFyIF9pc1NhbWVEYXRlcyA9IGlzU2FtZURhdGVzKGNhbGVuZGFyVmFsdWUoKSwgY2xvbmUpLFxuICAgICAgX2lzU2FtZURhdGVzMiA9IF9zbGljZWRUb0FycmF5KF9pc1NhbWVEYXRlcywgMiksXG4gICAgICBpc1NhbWVNZXJnZWREYXRlcyA9IF9pc1NhbWVEYXRlczJbMF0sXG4gICAgICBpc1NhbWVTdGFydCA9IF9pc1NhbWVEYXRlczJbMV07XG4gICAgaWYgKCFpc1NhbWVNZXJnZWREYXRlcykge1xuICAgICAgc2V0Q2FsZW5kYXJWYWx1ZShjbG9uZSk7XG5cbiAgICAgIC8vIFRyaWdnZXIgY2FsZW5kYXIgY2hhbmdlIGV2ZW50XG4gICAgICBpZiAob25DYWxlbmRhckNoYW5nZSkge1xuICAgICAgICB2YXIgY2VsbFRleHRzID0gZ2V0RGF0ZVRleHRzKGNsb25lKTtcbiAgICAgICAgb25DYWxlbmRhckNoYW5nZShjbG9uZSwgY2VsbFRleHRzLCB7XG4gICAgICAgICAgcmFuZ2U6IGlzU2FtZVN0YXJ0ID8gJ2VuZCcgOiAnc3RhcnQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB0cmlnZ2VyT2sgPSBmdW5jdGlvbiB0cmlnZ2VyT2soKSB7XG4gICAgaWYgKG9uT2spIHtcbiAgICAgIG9uT2soY2FsZW5kYXJWYWx1ZSgpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBbbWVyZ2VkVmFsdWUsIHNldElubmVyVmFsdWUsIGNhbGVuZGFyVmFsdWUsIHRyaWdnZXJDYWxlbmRhckNoYW5nZSwgdHJpZ2dlck9rXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJhbmdlVmFsdWUoaW5mbywgbWVyZ2VkVmFsdWUsIHNldElubmVyVmFsdWUsIGdldENhbGVuZGFyVmFsdWUsIHRyaWdnZXJDYWxlbmRhckNoYW5nZSwgZGlzYWJsZWQsIGZvcm1hdExpc3QsIGZvY3VzZWQsIG9wZW4sIGlzSW52YWxpZGF0ZURhdGUpIHtcbiAgdmFyIGdlbmVyYXRlQ29uZmlnID0gaW5mby5nZW5lcmF0ZUNvbmZpZyxcbiAgICBsb2NhbGUgPSBpbmZvLmxvY2FsZSxcbiAgICBwaWNrZXIgPSBpbmZvLnBpY2tlcixcbiAgICBvbkNoYW5nZSA9IGluZm8ub25DaGFuZ2UsXG4gICAgYWxsb3dFbXB0eSA9IGluZm8uYWxsb3dFbXB0eSxcbiAgICBvcmRlciA9IGluZm8ub3JkZXI7XG4gIHZhciBvcmRlck9uQ2hhbmdlID0gZGlzYWJsZWQuc29tZShmdW5jdGlvbiAoZCkge1xuICAgIHJldHVybiBkO1xuICB9KSA/IGZhbHNlIDogb3JkZXI7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVXRpbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVV0aWwzID0gdXNlVXRpbChnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBmb3JtYXRMaXN0KSxcbiAgICBfdXNlVXRpbDQgPSBfc2xpY2VkVG9BcnJheShfdXNlVXRpbDMsIDIpLFxuICAgIGdldERhdGVUZXh0cyA9IF91c2VVdGlsNFswXSxcbiAgICBpc1NhbWVEYXRlcyA9IF91c2VVdGlsNFsxXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFZhbHVlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVzZWQgZm9yIHRyaWdnZXIgYG9uQ2hhbmdlYCBldmVudC5cbiAgLy8gUmVjb3JkIGN1cnJlbnQgdmFsdWUgd2hpY2ggaXMgd2FpdCBmb3Igc3VibWl0LlxuICB2YXIgX3VzZVN5bmNTdGF0ZTMgPSB1c2VTeW5jU3RhdGUobWVyZ2VkVmFsdWUpLFxuICAgIF91c2VTeW5jU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN5bmNTdGF0ZTMsIDIpLFxuICAgIHN1Ym1pdFZhbHVlID0gX3VzZVN5bmNTdGF0ZTRbMF0sXG4gICAgc2V0U3VibWl0VmFsdWUgPSBfdXNlU3luY1N0YXRlNFsxXTtcblxuICAvKiogU3luYyBjYWxlbmRhclZhbHVlICYgc3VibWl0VmFsdWUgYmFjayB3aXRoIHZhbHVlICovXG4gIHZhciBzeW5jV2l0aFZhbHVlID0gdXNlRXZlbnQoZnVuY3Rpb24gKCkge1xuICAgIHNldFN1Ym1pdFZhbHVlKG1lcmdlZFZhbHVlKTtcbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc3luY1dpdGhWYWx1ZSgpO1xuICB9LCBbbWVyZ2VkVmFsdWVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN1Ym1pdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB0cmlnZ2VyU3VibWl0ID0gdXNlRXZlbnQoZnVuY3Rpb24gKG5leHRWYWx1ZSkge1xuICAgIHZhciBpc051bGxWYWx1ZSA9IG5leHRWYWx1ZSA9PT0gbnVsbDtcbiAgICB2YXIgY2xvbmUgPSBfdG9Db25zdW1hYmxlQXJyYXkobmV4dFZhbHVlIHx8IHN1Ym1pdFZhbHVlKCkpO1xuXG4gICAgLy8gRmlsbCBudWxsIHZhbHVlXG4gICAgaWYgKGlzTnVsbFZhbHVlKSB7XG4gICAgICB2YXIgbWF4TGVuID0gTWF0aC5tYXgoZGlzYWJsZWQubGVuZ3RoLCBjbG9uZS5sZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhMZW47IGkgKz0gMSkge1xuICAgICAgICBpZiAoIWRpc2FibGVkW2ldKSB7XG4gICAgICAgICAgY2xvbmVbaV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSB3aGVuIGV4aXN0IHZhbHVlIHRvIHNvcnRcbiAgICBpZiAob3JkZXJPbkNoYW5nZSAmJiBjbG9uZVswXSAmJiBjbG9uZVsxXSkge1xuICAgICAgY2xvbmUgPSBvcmRlckRhdGVzKGNsb25lLCBnZW5lcmF0ZUNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gU3luYyBgY2FsZW5kYXJWYWx1ZWBcbiAgICB0cmlnZ2VyQ2FsZW5kYXJDaGFuZ2UoY2xvbmUpO1xuXG4gICAgLy8gPT09PT09PT09IFZhbGlkYXRlIGNoZWNrID09PT09PT09PVxuICAgIHZhciBfY2xvbmUgPSBjbG9uZSxcbiAgICAgIF9jbG9uZTIgPSBfc2xpY2VkVG9BcnJheShfY2xvbmUsIDIpLFxuICAgICAgc3RhcnQgPSBfY2xvbmUyWzBdLFxuICAgICAgZW5kID0gX2Nsb25lMlsxXTtcblxuICAgIC8vID4+PiBFbXB0eVxuICAgIHZhciBzdGFydEVtcHR5ID0gIXN0YXJ0O1xuICAgIHZhciBlbmRFbXB0eSA9ICFlbmQ7XG4gICAgdmFyIHZhbGlkYXRlRW1wdHlEYXRlUmFuZ2UgPSBhbGxvd0VtcHR5ID9cbiAgICAvLyBWYWxpZGF0ZSBlbXB0eSBzdGFydFxuICAgICghc3RhcnRFbXB0eSB8fCBhbGxvd0VtcHR5WzBdKSAmJiAoXG4gICAgLy8gVmFsaWRhdGUgZW1wdHkgZW5kXG4gICAgIWVuZEVtcHR5IHx8IGFsbG93RW1wdHlbMV0pIDogdHJ1ZTtcblxuICAgIC8vID4+PiBPcmRlclxuICAgIHZhciB2YWxpZGF0ZU9yZGVyID0gIW9yZGVyIHx8IHN0YXJ0RW1wdHkgfHwgZW5kRW1wdHkgfHwgaXNTYW1lKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIHN0YXJ0LCBlbmQsIHBpY2tlcikgfHwgZ2VuZXJhdGVDb25maWcuaXNBZnRlcihlbmQsIHN0YXJ0KTtcblxuICAgIC8vID4+PiBJbnZhbGlkXG4gICAgdmFyIHZhbGlkYXRlRGF0ZXMgPVxuICAgIC8vIFZhbGlkYXRlIHN0YXJ0XG4gICAgKGRpc2FibGVkWzBdIHx8ICFzdGFydCB8fCAhaXNJbnZhbGlkYXRlRGF0ZShzdGFydCwge1xuICAgICAgYWN0aXZlSW5kZXg6IDBcbiAgICB9KSkgJiYgKFxuICAgIC8vIFZhbGlkYXRlIGVuZFxuICAgIGRpc2FibGVkWzFdIHx8ICFlbmQgfHwgIWlzSW52YWxpZGF0ZURhdGUoZW5kLCB7XG4gICAgICBmcm9tOiBzdGFydCxcbiAgICAgIGFjdGl2ZUluZGV4OiAxXG4gICAgfSkpO1xuICAgIC8vID4+PiBSZXN1bHRcbiAgICB2YXIgYWxsUGFzc2VkID1cbiAgICAvLyBOdWxsIHZhbHVlIGlzIGZyb20gY2xlYXIgYnV0dG9uXG4gICAgaXNOdWxsVmFsdWUgfHxcbiAgICAvLyBOb3JtYWwgY2hlY2tcbiAgICB2YWxpZGF0ZUVtcHR5RGF0ZVJhbmdlICYmIHZhbGlkYXRlT3JkZXIgJiYgdmFsaWRhdGVEYXRlcztcbiAgICBpZiAoYWxsUGFzc2VkKSB7XG4gICAgICAvLyBTeW5jIHZhbHVlIHdpdGggc3VibWl0IHZhbHVlXG4gICAgICBzZXRJbm5lclZhbHVlKGNsb25lKTtcbiAgICAgIHZhciBfaXNTYW1lRGF0ZXMzID0gaXNTYW1lRGF0ZXMoY2xvbmUsIG1lcmdlZFZhbHVlKSxcbiAgICAgICAgX2lzU2FtZURhdGVzNCA9IF9zbGljZWRUb0FycmF5KF9pc1NhbWVEYXRlczMsIDEpLFxuICAgICAgICBpc1NhbWVNZXJnZWREYXRlcyA9IF9pc1NhbWVEYXRlczRbMF07XG5cbiAgICAgIC8vIFRyaWdnZXIgYG9uQ2hhbmdlYCBpZiBuZWVkZWRcbiAgICAgIGlmIChvbkNoYW5nZSAmJiAhaXNTYW1lTWVyZ2VkRGF0ZXMpIHtcbiAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgIC8vIFJldHVybiBudWxsIGRpcmVjdGx5IGlmIGFsbCBkYXRlIGFyZSBlbXB0eVxuICAgICAgICBpc051bGxWYWx1ZSAmJiBjbG9uZS5ldmVyeShmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuICF2YWw7XG4gICAgICAgIH0pID8gbnVsbCA6IGNsb25lLCBnZXREYXRlVGV4dHMoY2xvbmUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsbFBhc3NlZDtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBGbHVzaCBTdWJtaXQgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZmx1c2hTdWJtaXQgPSB1c2VFdmVudChmdW5jdGlvbiAoaW5kZXgsIG5lZWRUcmlnZ2VyQ2hhbmdlKSB7XG4gICAgdmFyIG5leHRTdWJtaXRWYWx1ZSA9IGZpbGxJbmRleChzdWJtaXRWYWx1ZSgpLCBpbmRleCwgZ2V0Q2FsZW5kYXJWYWx1ZSgpW2luZGV4XSk7XG4gICAgc2V0U3VibWl0VmFsdWUobmV4dFN1Ym1pdFZhbHVlKTtcbiAgICBpZiAobmVlZFRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgIHRyaWdnZXJTdWJtaXQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQWxsIGZpbmlzaGVkIGFjdGlvbiB0cmlnZ2VyIGFmdGVyIDIgZnJhbWVzXG4gIHZhciBpbnRlcmFjdGl2ZUZpbmlzaGVkID0gIWZvY3VzZWQgJiYgIW9wZW47XG4gIHVzZUxvY2tFZmZlY3QoIWludGVyYWN0aXZlRmluaXNoZWQsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaW50ZXJhY3RpdmVGaW5pc2hlZCkge1xuICAgICAgLy8gQWx3YXlzIHRyeSB0byB0cmlnZ2VyIHN1Ym1pdCBmaXJzdFxuICAgICAgdHJpZ2dlclN1Ym1pdCgpO1xuXG4gICAgICAvLyBUcmlnZ2VyIGNhbGVuZGFyIGNoYW5nZSBzaW5jZSB0aGlzIGlzIGEgZWZmZWN0IHJlc2V0XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy8yMjM1MVxuICAgICAgdHJpZ2dlckNhbGVuZGFyQ2hhbmdlKG1lcmdlZFZhbHVlKTtcblxuICAgICAgLy8gU3luYyB3aXRoIHZhbHVlIGFueXdheVxuICAgICAgc3luY1dpdGhWYWx1ZSgpO1xuICAgIH1cbiAgfSwgMik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZXR1cm4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gW2ZsdXNoU3VibWl0LCB0cmlnZ2VyU3VibWl0XTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTaG93Tm93KHBpY2tlciwgbW9kZSwgc2hvd05vdywgc2hvd1RvZGF5LCByYW5nZVBpY2tlcikge1xuICBpZiAobW9kZSAhPT0gJ2RhdGUnICYmIG1vZGUgIT09ICd0aW1lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc2hvd05vdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNob3dOb3c7XG4gIH1cblxuICAvLyBDb21wYXRpYmxlIHdpdGggb2xkIHZlcnNpb24gYHNob3dUb2RheWBcbiAgaWYgKHNob3dUb2RheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNob3dUb2RheTtcbiAgfVxuICByZXR1cm4gIXJhbmdlUGlja2VyICYmIChwaWNrZXIgPT09ICdkYXRlJyB8fCBwaWNrZXIgPT09ICd0aW1lJyk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcm1hdFZhbHVlLCBnZXRXZWVrU3RhcnREYXRlLCBpc1NhbWVEYXRlLCBpc1NhbWVNb250aCwgV0VFS19EQVlfQ09VTlQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgdXNlSW5mbyB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgUGFuZWxCb2R5IGZyb20gXCIuLi9QYW5lbEJvZHlcIjtcbmltcG9ydCBQYW5lbEhlYWRlciBmcm9tIFwiLi4vUGFuZWxIZWFkZXJcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGVQYW5lbChwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIF9wcm9wcyRwYW5lbE5hbWUgPSBwcm9wcy5wYW5lbE5hbWUsXG4gICAgcGFuZWxOYW1lID0gX3Byb3BzJHBhbmVsTmFtZSA9PT0gdm9pZCAwID8gJ2RhdGUnIDogX3Byb3BzJHBhbmVsTmFtZSxcbiAgICBsb2NhbGUgPSBwcm9wcy5sb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBwcm9wcy5nZW5lcmF0ZUNvbmZpZyxcbiAgICBwaWNrZXJWYWx1ZSA9IHByb3BzLnBpY2tlclZhbHVlLFxuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UgPSBwcm9wcy5vblBpY2tlclZhbHVlQ2hhbmdlLFxuICAgIG9uTW9kZUNoYW5nZSA9IHByb3BzLm9uTW9kZUNoYW5nZSxcbiAgICBfcHJvcHMkbW9kZSA9IHByb3BzLm1vZGUsXG4gICAgbW9kZSA9IF9wcm9wcyRtb2RlID09PSB2b2lkIDAgPyAnZGF0ZScgOiBfcHJvcHMkbW9kZSxcbiAgICBkaXNhYmxlZERhdGUgPSBwcm9wcy5kaXNhYmxlZERhdGUsXG4gICAgb25TZWxlY3QgPSBwcm9wcy5vblNlbGVjdCxcbiAgICBvbkhvdmVyID0gcHJvcHMub25Ib3ZlcixcbiAgICBzaG93V2VlayA9IHByb3BzLnNob3dXZWVrO1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLVwiKS5jb25jYXQocGFuZWxOYW1lLCBcIi1wYW5lbFwiKTtcbiAgdmFyIGNlbGxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWNlbGxcIik7XG4gIHZhciBpc1dlZWsgPSBtb2RlID09PSAnd2Vlayc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQmFzZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUluZm8gPSB1c2VJbmZvKHByb3BzLCBtb2RlKSxcbiAgICBfdXNlSW5mbzIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5mbywgMiksXG4gICAgaW5mbyA9IF91c2VJbmZvMlswXSxcbiAgICBub3cgPSBfdXNlSW5mbzJbMV07XG4gIHZhciB3ZWVrRmlyc3REYXkgPSBnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0V2Vla0ZpcnN0RGF5KGxvY2FsZS5sb2NhbGUpO1xuICB2YXIgbW9udGhTdGFydERhdGUgPSBnZW5lcmF0ZUNvbmZpZy5zZXREYXRlKHBpY2tlclZhbHVlLCAxKTtcbiAgdmFyIGJhc2VEYXRlID0gZ2V0V2Vla1N0YXJ0RGF0ZShsb2NhbGUubG9jYWxlLCBnZW5lcmF0ZUNvbmZpZywgbW9udGhTdGFydERhdGUpO1xuICB2YXIgbW9udGggPSBnZW5lcmF0ZUNvbmZpZy5nZXRNb250aChwaWNrZXJWYWx1ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09IFByZWZpeENvbHVtbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHNob3dQcmVmaXhDb2x1bW4gPSBzaG93V2VlayA9PT0gdW5kZWZpbmVkID8gaXNXZWVrIDogc2hvd1dlZWs7XG4gIHZhciBwcmVmaXhDb2x1bW4gPSBzaG93UHJlZml4Q29sdW1uID8gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAvLyA+Pj4gQWRkaXRpb25hbCBjaGVjayBmb3IgZGlzYWJsZWRcbiAgICB2YXIgZGlzYWJsZWQgPSBkaXNhYmxlZERhdGUgPT09IG51bGwgfHwgZGlzYWJsZWREYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkaXNhYmxlZERhdGUoZGF0ZSwge1xuICAgICAgdHlwZTogJ3dlZWsnXG4gICAgfSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidGRcIiwge1xuICAgICAga2V5OiBcIndlZWtcIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhjZWxsUHJlZml4Q2xzLCBcIlwiLmNvbmNhdChjZWxsUHJlZml4Q2xzLCBcIi13ZWVrXCIpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGNlbGxQcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBkaXNhYmxlZCkpXG4gICAgICAvLyBPcGVyYXRpb246IFNhbWUgYXMgY29kZSBpbiBQYW5lbEJvZHlcbiAgICAgICxcbiAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICBvblNlbGVjdChkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgb25Ib3ZlciA9PT0gbnVsbCB8fCBvbkhvdmVyID09PSB2b2lkIDAgfHwgb25Ib3ZlcihkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgb25Ib3ZlciA9PT0gbnVsbCB8fCBvbkhvdmVyID09PSB2b2lkIDAgfHwgb25Ib3ZlcihudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItaW5uZXJcIilcbiAgICB9LCBnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0V2Vlayhsb2NhbGUubG9jYWxlLCBkYXRlKSkpO1xuICB9IDogbnVsbDtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENlbGxzID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID4+PiBIZWFkZXIgQ2VsbHNcbiAgdmFyIGhlYWRlckNlbGxzID0gW107XG4gIHZhciB3ZWVrRGF5c0xvY2FsZSA9IGxvY2FsZS5zaG9ydFdlZWtEYXlzIHx8IChnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0U2hvcnRXZWVrRGF5cyA/IGdlbmVyYXRlQ29uZmlnLmxvY2FsZS5nZXRTaG9ydFdlZWtEYXlzKGxvY2FsZS5sb2NhbGUpIDogW10pO1xuICBpZiAocHJlZml4Q29sdW1uKSB7XG4gICAgaGVhZGVyQ2VsbHMucHVzaCggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCB7XG4gICAgICBrZXk6IFwiZW1wdHlcIlxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9XG4gICAgfSwgbG9jYWxlLndlZWspKSk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXRUVLX0RBWV9DT1VOVDsgaSArPSAxKSB7XG4gICAgaGVhZGVyQ2VsbHMucHVzaCggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCB7XG4gICAgICBrZXk6IGlcbiAgICB9LCB3ZWVrRGF5c0xvY2FsZVsoaSArIHdlZWtGaXJzdERheSkgJSBXRUVLX0RBWV9DT1VOVF0pKTtcbiAgfVxuXG4gIC8vID4+PiBCb2R5IENlbGxzXG4gIHZhciBnZXRDZWxsRGF0ZSA9IGZ1bmN0aW9uIGdldENlbGxEYXRlKGRhdGUsIG9mZnNldCkge1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGREYXRlKGRhdGUsIG9mZnNldCk7XG4gIH07XG4gIHZhciBnZXRDZWxsVGV4dCA9IGZ1bmN0aW9uIGdldENlbGxUZXh0KGRhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VmFsdWUoZGF0ZSwge1xuICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICBmb3JtYXQ6IGxvY2FsZS5jZWxsRGF0ZUZvcm1hdCxcbiAgICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICAgIH0pO1xuICB9O1xuICB2YXIgZ2V0Q2VsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldENlbGxDbGFzc05hbWUoZGF0ZSkge1xuICAgIHZhciBjbGFzc09iaiA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2VsbC1pbi12aWV3XCIpLCBpc1NhbWVNb250aChnZW5lcmF0ZUNvbmZpZywgZGF0ZSwgcGlja2VyVmFsdWUpKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jZWxsLXRvZGF5XCIpLCBpc1NhbWVEYXRlKGdlbmVyYXRlQ29uZmlnLCBkYXRlLCBub3cpKTtcbiAgICByZXR1cm4gY2xhc3NPYmo7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBIZWFkZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbW9udGhzTG9jYWxlID0gbG9jYWxlLnNob3J0TW9udGhzIHx8IChnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0U2hvcnRNb250aHMgPyBnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0U2hvcnRNb250aHMobG9jYWxlLmxvY2FsZSkgOiBbXSk7XG4gIHZhciB5ZWFyTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsb2NhbGUueWVhclNlbGVjdCxcbiAgICBrZXk6IFwieWVhclwiLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICBvbk1vZGVDaGFuZ2UoJ3llYXInLCBwaWNrZXJWYWx1ZSk7XG4gICAgfSxcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXllYXItYnRuXCIpXG4gIH0sIGZvcm1hdFZhbHVlKHBpY2tlclZhbHVlLCB7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZm9ybWF0OiBsb2NhbGUueWVhckZvcm1hdCxcbiAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWdcbiAgfSkpO1xuICB2YXIgbW9udGhOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxvY2FsZS5tb250aFNlbGVjdCxcbiAgICBrZXk6IFwibW9udGhcIixcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgb25Nb2RlQ2hhbmdlKCdtb250aCcsIHBpY2tlclZhbHVlKTtcbiAgICB9LFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItbW9udGgtYnRuXCIpXG4gIH0sIGxvY2FsZS5tb250aEZvcm1hdCA/IGZvcm1hdFZhbHVlKHBpY2tlclZhbHVlLCB7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZm9ybWF0OiBsb2NhbGUubW9udGhGb3JtYXQsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gIH0pIDogbW9udGhzTG9jYWxlW21vbnRoXSk7XG4gIHZhciBtb250aFllYXJOb2RlcyA9IGxvY2FsZS5tb250aEJlZm9yZVllYXIgPyBbbW9udGhOb2RlLCB5ZWFyTm9kZV0gOiBbeWVhck5vZGUsIG1vbnRoTm9kZV07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGluZm9cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbFByZWZpeENscywgc2hvd1dlZWsgJiYgXCJcIi5jb25jYXQocGFuZWxQcmVmaXhDbHMsIFwiLXNob3ctd2Vla1wiKSlcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxIZWFkZXIsIHtcbiAgICBvZmZzZXQ6IGZ1bmN0aW9uIG9mZnNldChkaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZE1vbnRoKHBpY2tlclZhbHVlLCBkaXN0YW5jZSk7XG4gICAgfSxcbiAgICBzdXBlck9mZnNldDogZnVuY3Rpb24gc3VwZXJPZmZzZXQoZGlzdGFuY2UpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKHBpY2tlclZhbHVlLCBkaXN0YW5jZSk7XG4gICAgfSxcbiAgICBvbkNoYW5nZTogb25QaWNrZXJWYWx1ZUNoYW5nZVxuICAgIC8vIExpbWl0YXRpb25cbiAgICAsXG4gICAgZ2V0U3RhcnQ6IGZ1bmN0aW9uIGdldFN0YXJ0KGRhdGUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5zZXREYXRlKGRhdGUsIDEpO1xuICAgIH0sXG4gICAgZ2V0RW5kOiBmdW5jdGlvbiBnZXRFbmQoZGF0ZSkge1xuICAgICAgdmFyIGNsb25lID0gZ2VuZXJhdGVDb25maWcuc2V0RGF0ZShkYXRlLCAxKTtcbiAgICAgIGNsb25lID0gZ2VuZXJhdGVDb25maWcuYWRkTW9udGgoY2xvbmUsIDEpO1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZERhdGUoY2xvbmUsIC0xKTtcbiAgICB9XG4gIH0sIG1vbnRoWWVhck5vZGVzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxCb2R5LCBfZXh0ZW5kcyh7XG4gICAgdGl0bGVGb3JtYXQ6IGxvY2FsZS5maWVsZERhdGVGb3JtYXRcbiAgfSwgcHJvcHMsIHtcbiAgICBjb2xOdW06IFdFRUtfREFZX0NPVU5ULFxuICAgIHJvd051bTogNixcbiAgICBiYXNlRGF0ZTogYmFzZURhdGVcbiAgICAvLyBIZWFkZXJcbiAgICAsXG4gICAgaGVhZGVyQ2VsbHM6IGhlYWRlckNlbGxzXG4gICAgLy8gQm9keVxuICAgICxcbiAgICBnZXRDZWxsRGF0ZTogZ2V0Q2VsbERhdGUsXG4gICAgZ2V0Q2VsbFRleHQ6IGdldENlbGxUZXh0LFxuICAgIGdldENlbGxDbGFzc05hbWU6IGdldENlbGxDbGFzc05hbWUsXG4gICAgcHJlZml4Q29sdW1uOiBwcmVmaXhDb2x1bW4sXG4gICAgY2VsbFNlbGVjdGlvbjogIWlzV2Vla1xuICB9KSkpKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZVRpbWVJbmZvIGZyb20gXCIuLi8uLi9ob29rcy91c2VUaW1lSW5mb1wiO1xuaW1wb3J0IHsgZmlsbFRpbWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCBEYXRlUGFuZWwgZnJvbSBcIi4uL0RhdGVQYW5lbFwiO1xuaW1wb3J0IFRpbWVQYW5lbCBmcm9tIFwiLi4vVGltZVBhbmVsXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRlVGltZVBhbmVsKHByb3BzKSB7XG4gIHZhciBwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBwcm9wcy5nZW5lcmF0ZUNvbmZpZyxcbiAgICBzaG93VGltZSA9IHByb3BzLnNob3dUaW1lLFxuICAgIG9uU2VsZWN0ID0gcHJvcHMub25TZWxlY3QsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICBwaWNrZXJWYWx1ZSA9IHByb3BzLnBpY2tlclZhbHVlLFxuICAgIG9uSG92ZXIgPSBwcm9wcy5vbkhvdmVyO1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRhdGV0aW1lLXBhbmVsXCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGltZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlVGltZUluZm8gPSB1c2VUaW1lSW5mbyhnZW5lcmF0ZUNvbmZpZywgc2hvd1RpbWUpLFxuICAgIF91c2VUaW1lSW5mbzIgPSBfc2xpY2VkVG9BcnJheShfdXNlVGltZUluZm8sIDEpLFxuICAgIGdldFZhbGlkVGltZSA9IF91c2VUaW1lSW5mbzJbMF07XG5cbiAgLy8gTWVyZ2UgdGhlIHRpbWUgaW5mbyBmcm9tIGB2YWx1ZWAgb3IgYHBpY2tlclZhbHVlYFxuICB2YXIgbWVyZ2VUaW1lID0gZnVuY3Rpb24gbWVyZ2VUaW1lKGRhdGUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWxsVGltZShnZW5lcmF0ZUNvbmZpZywgZGF0ZSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsbFRpbWUoZ2VuZXJhdGVDb25maWcsIGRhdGUsIHBpY2tlclZhbHVlKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSG92ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25EYXRlSG92ZXIgPSBmdW5jdGlvbiBvbkRhdGVIb3ZlcihkYXRlKSB7XG4gICAgb25Ib3ZlciA9PT0gbnVsbCB8fCBvbkhvdmVyID09PSB2b2lkIDAgfHwgb25Ib3ZlcihkYXRlID8gbWVyZ2VUaW1lKGRhdGUpIDogZGF0ZSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNlbGVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uRGF0ZVNlbGVjdCA9IGZ1bmN0aW9uIG9uRGF0ZVNlbGVjdChkYXRlKSB7XG4gICAgLy8gTWVyZ2Ugd2l0aCBjdXJyZW50IHRpbWVcbiAgICB2YXIgY2xvbmVEYXRlID0gbWVyZ2VUaW1lKGRhdGUpO1xuICAgIG9uU2VsZWN0KGdldFZhbGlkVGltZShjbG9uZURhdGUsIGNsb25lRGF0ZSkpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBwYW5lbFByZWZpeENsc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXRlUGFuZWwsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIG9uU2VsZWN0OiBvbkRhdGVTZWxlY3QsXG4gICAgb25Ib3Zlcjogb25EYXRlSG92ZXJcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lUGFuZWwsIHByb3BzKSk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmb3JtYXRWYWx1ZSwgaXNJblJhbmdlLCBpc1NhbWVEZWNhZGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgdXNlSW5mbyB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgUGFuZWxCb2R5IGZyb20gXCIuLi9QYW5lbEJvZHlcIjtcbmltcG9ydCBQYW5lbEhlYWRlciBmcm9tIFwiLi4vUGFuZWxIZWFkZXJcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERlY2FkZVBhbmVsKHByb3BzKSB7XG4gIHZhciBwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgcGlja2VyVmFsdWUgPSBwcm9wcy5waWNrZXJWYWx1ZSxcbiAgICBkaXNhYmxlZERhdGUgPSBwcm9wcy5kaXNhYmxlZERhdGUsXG4gICAgb25QaWNrZXJWYWx1ZUNoYW5nZSA9IHByb3BzLm9uUGlja2VyVmFsdWVDaGFuZ2U7XG4gIHZhciBwYW5lbFByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGVjYWRlLXBhbmVsXCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IEJhc2UgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VJbmZvID0gdXNlSW5mbyhwcm9wcywgJ2RlY2FkZScpLFxuICAgIF91c2VJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbmZvLCAxKSxcbiAgICBpbmZvID0gX3VzZUluZm8yWzBdO1xuICB2YXIgZ2V0U3RhcnRZZWFyID0gZnVuY3Rpb24gZ2V0U3RhcnRZZWFyKGRhdGUpIHtcbiAgICB2YXIgc3RhcnRZZWFyID0gTWF0aC5mbG9vcihnZW5lcmF0ZUNvbmZpZy5nZXRZZWFyKGRhdGUpIC8gMTAwKSAqIDEwMDtcbiAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuc2V0WWVhcihkYXRlLCBzdGFydFllYXIpO1xuICB9O1xuICB2YXIgZ2V0RW5kWWVhciA9IGZ1bmN0aW9uIGdldEVuZFllYXIoZGF0ZSkge1xuICAgIHZhciBzdGFydFllYXIgPSBnZXRTdGFydFllYXIoZGF0ZSk7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZFllYXIoc3RhcnRZZWFyLCA5OSk7XG4gIH07XG4gIHZhciBzdGFydFllYXJEYXRlID0gZ2V0U3RhcnRZZWFyKHBpY2tlclZhbHVlKTtcbiAgdmFyIGVuZFllYXJEYXRlID0gZ2V0RW5kWWVhcihwaWNrZXJWYWx1ZSk7XG4gIHZhciBiYXNlRGF0ZSA9IGdlbmVyYXRlQ29uZmlnLmFkZFllYXIoc3RhcnRZZWFyRGF0ZSwgLTEwKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENlbGxzID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBnZXRDZWxsRGF0ZSA9IGZ1bmN0aW9uIGdldENlbGxEYXRlKGRhdGUsIG9mZnNldCkge1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKGRhdGUsIG9mZnNldCAqIDEwKTtcbiAgfTtcbiAgdmFyIGdldENlbGxUZXh0ID0gZnVuY3Rpb24gZ2V0Q2VsbFRleHQoZGF0ZSkge1xuICAgIHZhciBjZWxsWWVhckZvcm1hdCA9IGxvY2FsZS5jZWxsWWVhckZvcm1hdDtcbiAgICB2YXIgc3RhcnRZZWFyU3RyID0gZm9ybWF0VmFsdWUoZGF0ZSwge1xuICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICBmb3JtYXQ6IGNlbGxZZWFyRm9ybWF0LFxuICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gICAgfSk7XG4gICAgdmFyIGVuZFllYXJTdHIgPSBmb3JtYXRWYWx1ZShnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKGRhdGUsIDkpLCB7XG4gICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgIGZvcm1hdDogY2VsbFllYXJGb3JtYXQsXG4gICAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWdcbiAgICB9KTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoc3RhcnRZZWFyU3RyLCBcIi1cIikuY29uY2F0KGVuZFllYXJTdHIpO1xuICB9O1xuICB2YXIgZ2V0Q2VsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldENlbGxDbGFzc05hbWUoZGF0ZSkge1xuICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2VsbC1pbi12aWV3XCIpLCBpc1NhbWVEZWNhZGUoZ2VuZXJhdGVDb25maWcsIGRhdGUsIHN0YXJ0WWVhckRhdGUpIHx8IGlzU2FtZURlY2FkZShnZW5lcmF0ZUNvbmZpZywgZGF0ZSwgZW5kWWVhckRhdGUpIHx8IGlzSW5SYW5nZShnZW5lcmF0ZUNvbmZpZywgc3RhcnRZZWFyRGF0ZSwgZW5kWWVhckRhdGUsIGRhdGUpKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRGlzYWJsZWQgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWREaXNhYmxlZERhdGUgPSBkaXNhYmxlZERhdGUgPyBmdW5jdGlvbiAoY3VycmVudERhdGUsIGRpc2FibGVkSW5mbykge1xuICAgIC8vIFN0YXJ0XG4gICAgdmFyIGJhc2VTdGFydERhdGUgPSBnZW5lcmF0ZUNvbmZpZy5zZXREYXRlKGN1cnJlbnREYXRlLCAxKTtcbiAgICB2YXIgYmFzZVN0YXJ0TW9udGggPSBnZW5lcmF0ZUNvbmZpZy5zZXRNb250aChiYXNlU3RhcnREYXRlLCAwKTtcbiAgICB2YXIgYmFzZVN0YXJ0WWVhciA9IGdlbmVyYXRlQ29uZmlnLnNldFllYXIoYmFzZVN0YXJ0TW9udGgsIE1hdGguZmxvb3IoZ2VuZXJhdGVDb25maWcuZ2V0WWVhcihiYXNlU3RhcnRNb250aCkgLyAxMCkgKiAxMCk7XG5cbiAgICAvLyBFbmRcbiAgICB2YXIgYmFzZUVuZFllYXIgPSBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKGJhc2VTdGFydFllYXIsIDEwKTtcbiAgICB2YXIgYmFzZUVuZERhdGUgPSBnZW5lcmF0ZUNvbmZpZy5hZGREYXRlKGJhc2VFbmRZZWFyLCAtMSk7XG4gICAgcmV0dXJuIGRpc2FibGVkRGF0ZShiYXNlU3RhcnRZZWFyLCBkaXNhYmxlZEluZm8pICYmIGRpc2FibGVkRGF0ZShiYXNlRW5kRGF0ZSwgZGlzYWJsZWRJbmZvKTtcbiAgfSA6IG51bGw7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBIZWFkZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgeWVhck5vZGUgPSBcIlwiLmNvbmNhdChmb3JtYXRWYWx1ZShzdGFydFllYXJEYXRlLCB7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZm9ybWF0OiBsb2NhbGUueWVhckZvcm1hdCxcbiAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWdcbiAgfSksIFwiLVwiKS5jb25jYXQoZm9ybWF0VmFsdWUoZW5kWWVhckRhdGUsIHtcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBmb3JtYXQ6IGxvY2FsZS55ZWFyRm9ybWF0LFxuICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGluZm9cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogcGFuZWxQcmVmaXhDbHNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxIZWFkZXIsIHtcbiAgICBzdXBlck9mZnNldDogZnVuY3Rpb24gc3VwZXJPZmZzZXQoZGlzdGFuY2UpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKHBpY2tlclZhbHVlLCBkaXN0YW5jZSAqIDEwMCk7XG4gICAgfSxcbiAgICBvbkNoYW5nZTogb25QaWNrZXJWYWx1ZUNoYW5nZVxuICAgIC8vIExpbWl0YXRpb25cbiAgICAsXG4gICAgZ2V0U3RhcnQ6IGdldFN0YXJ0WWVhcixcbiAgICBnZXRFbmQ6IGdldEVuZFllYXJcbiAgfSwgeWVhck5vZGUpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbEJvZHksIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVkRGF0ZTogbWVyZ2VkRGlzYWJsZWREYXRlLFxuICAgIGNvbE51bTogMyxcbiAgICByb3dOdW06IDQsXG4gICAgYmFzZURhdGU6IGJhc2VEYXRlXG4gICAgLy8gQm9keVxuICAgICxcbiAgICBnZXRDZWxsRGF0ZTogZ2V0Q2VsbERhdGUsXG4gICAgZ2V0Q2VsbFRleHQ6IGdldENlbGxUZXh0LFxuICAgIGdldENlbGxDbGFzc05hbWU6IGdldENlbGxDbGFzc05hbWVcbiAgfSkpKSk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmb3JtYXRWYWx1ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IHsgUGFuZWxDb250ZXh0LCB1c2VJbmZvIH0gZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBQYW5lbEJvZHkgZnJvbSBcIi4uL1BhbmVsQm9keVwiO1xuaW1wb3J0IFBhbmVsSGVhZGVyIGZyb20gXCIuLi9QYW5lbEhlYWRlclwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9udGhQYW5lbChwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIHBpY2tlclZhbHVlID0gcHJvcHMucGlja2VyVmFsdWUsXG4gICAgZGlzYWJsZWREYXRlID0gcHJvcHMuZGlzYWJsZWREYXRlLFxuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UgPSBwcm9wcy5vblBpY2tlclZhbHVlQ2hhbmdlLFxuICAgIG9uTW9kZUNoYW5nZSA9IHByb3BzLm9uTW9kZUNoYW5nZTtcbiAgdmFyIHBhbmVsUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1tb250aC1wYW5lbFwiKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBCYXNlID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlSW5mbyA9IHVzZUluZm8ocHJvcHMsICdtb250aCcpLFxuICAgIF91c2VJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbmZvLCAxKSxcbiAgICBpbmZvID0gX3VzZUluZm8yWzBdO1xuICB2YXIgYmFzZURhdGUgPSBnZW5lcmF0ZUNvbmZpZy5zZXRNb250aChwaWNrZXJWYWx1ZSwgMCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBNb250aCA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbW9udGhzTG9jYWxlID0gbG9jYWxlLnNob3J0TW9udGhzIHx8IChnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0U2hvcnRNb250aHMgPyBnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0U2hvcnRNb250aHMobG9jYWxlLmxvY2FsZSkgOiBbXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBDZWxscyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0Q2VsbERhdGUgPSBmdW5jdGlvbiBnZXRDZWxsRGF0ZShkYXRlLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuYWRkTW9udGgoZGF0ZSwgb2Zmc2V0KTtcbiAgfTtcbiAgdmFyIGdldENlbGxUZXh0ID0gZnVuY3Rpb24gZ2V0Q2VsbFRleHQoZGF0ZSkge1xuICAgIHZhciBtb250aCA9IGdlbmVyYXRlQ29uZmlnLmdldE1vbnRoKGRhdGUpO1xuICAgIHJldHVybiBsb2NhbGUubW9udGhGb3JtYXQgPyBmb3JtYXRWYWx1ZShkYXRlLCB7XG4gICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgIGZvcm1hdDogbG9jYWxlLm1vbnRoRm9ybWF0LFxuICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gICAgfSkgOiBtb250aHNMb2NhbGVbbW9udGhdO1xuICB9O1xuICB2YXIgZ2V0Q2VsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldENlbGxDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jZWxsLWluLXZpZXdcIiksIHRydWUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBEaXNhYmxlZCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZERpc2FibGVkRGF0ZSA9IGRpc2FibGVkRGF0ZSA/IGZ1bmN0aW9uIChjdXJyZW50RGF0ZSwgZGlzYWJsZWRJbmZvKSB7XG4gICAgdmFyIHN0YXJ0RGF0ZSA9IGdlbmVyYXRlQ29uZmlnLnNldERhdGUoY3VycmVudERhdGUsIDEpO1xuICAgIHZhciBuZXh0TW9udGhTdGFydERhdGUgPSBnZW5lcmF0ZUNvbmZpZy5zZXRNb250aChzdGFydERhdGUsIGdlbmVyYXRlQ29uZmlnLmdldE1vbnRoKHN0YXJ0RGF0ZSkgKyAxKTtcbiAgICB2YXIgZW5kRGF0ZSA9IGdlbmVyYXRlQ29uZmlnLmFkZERhdGUobmV4dE1vbnRoU3RhcnREYXRlLCAtMSk7XG4gICAgcmV0dXJuIGRpc2FibGVkRGF0ZShzdGFydERhdGUsIGRpc2FibGVkSW5mbykgJiYgZGlzYWJsZWREYXRlKGVuZERhdGUsIGRpc2FibGVkSW5mbyk7XG4gIH0gOiBudWxsO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gSGVhZGVyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHllYXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAga2V5OiBcInllYXJcIixcbiAgICBcImFyaWEtbGFiZWxcIjogbG9jYWxlLnllYXJTZWxlY3QsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgIG9uTW9kZUNoYW5nZSgneWVhcicpO1xuICAgIH0sXG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi15ZWFyLWJ0blwiKVxuICB9LCBmb3JtYXRWYWx1ZShwaWNrZXJWYWx1ZSwge1xuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIGZvcm1hdDogbG9jYWxlLnllYXJGb3JtYXQsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gIH0pKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaW5mb1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBwYW5lbFByZWZpeENsc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbEhlYWRlciwge1xuICAgIHN1cGVyT2Zmc2V0OiBmdW5jdGlvbiBzdXBlck9mZnNldChkaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZFllYXIocGlja2VyVmFsdWUsIGRpc3RhbmNlKTtcbiAgICB9LFxuICAgIG9uQ2hhbmdlOiBvblBpY2tlclZhbHVlQ2hhbmdlXG4gICAgLy8gTGltaXRhdGlvblxuICAgICxcbiAgICBnZXRTdGFydDogZnVuY3Rpb24gZ2V0U3RhcnQoZGF0ZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldE1vbnRoKGRhdGUsIDApO1xuICAgIH0sXG4gICAgZ2V0RW5kOiBmdW5jdGlvbiBnZXRFbmQoZGF0ZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldE1vbnRoKGRhdGUsIDExKTtcbiAgICB9XG4gIH0sIHllYXJOb2RlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxCb2R5LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZERhdGU6IG1lcmdlZERpc2FibGVkRGF0ZSxcbiAgICB0aXRsZUZvcm1hdDogbG9jYWxlLmZpZWxkTW9udGhGb3JtYXQsXG4gICAgY29sTnVtOiAzLFxuICAgIHJvd051bTogNCxcbiAgICBiYXNlRGF0ZTogYmFzZURhdGVcbiAgICAvLyBCb2R5XG4gICAgLFxuICAgIGdldENlbGxEYXRlOiBnZXRDZWxsRGF0ZSxcbiAgICBnZXRDZWxsVGV4dDogZ2V0Q2VsbFRleHQsXG4gICAgZ2V0Q2VsbENsYXNzTmFtZTogZ2V0Q2VsbENsYXNzTmFtZVxuICB9KSkpKTtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmb3JtYXRWYWx1ZSwgaXNJblJhbmdlLCBpc1NhbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBpY2tlckhhY2tDb250ZXh0LCB1c2VQYW5lbENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYW5lbEJvZHkocHJvcHMpIHtcbiAgdmFyIHJvd051bSA9IHByb3BzLnJvd051bSxcbiAgICBjb2xOdW0gPSBwcm9wcy5jb2xOdW0sXG4gICAgYmFzZURhdGUgPSBwcm9wcy5iYXNlRGF0ZSxcbiAgICBnZXRDZWxsRGF0ZSA9IHByb3BzLmdldENlbGxEYXRlLFxuICAgIHByZWZpeENvbHVtbiA9IHByb3BzLnByZWZpeENvbHVtbixcbiAgICByb3dDbGFzc05hbWUgPSBwcm9wcy5yb3dDbGFzc05hbWUsXG4gICAgdGl0bGVGb3JtYXQgPSBwcm9wcy50aXRsZUZvcm1hdCxcbiAgICBnZXRDZWxsVGV4dCA9IHByb3BzLmdldENlbGxUZXh0LFxuICAgIGdldENlbGxDbGFzc05hbWUgPSBwcm9wcy5nZXRDZWxsQ2xhc3NOYW1lLFxuICAgIGhlYWRlckNlbGxzID0gcHJvcHMuaGVhZGVyQ2VsbHMsXG4gICAgX3Byb3BzJGNlbGxTZWxlY3Rpb24gPSBwcm9wcy5jZWxsU2VsZWN0aW9uLFxuICAgIGNlbGxTZWxlY3Rpb24gPSBfcHJvcHMkY2VsbFNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjZWxsU2VsZWN0aW9uLFxuICAgIGRpc2FibGVkRGF0ZSA9IHByb3BzLmRpc2FibGVkRGF0ZTtcbiAgdmFyIF91c2VQYW5lbENvbnRleHQgPSB1c2VQYW5lbENvbnRleHQoKSxcbiAgICBwcmVmaXhDbHMgPSBfdXNlUGFuZWxDb250ZXh0LnByZWZpeENscyxcbiAgICB0eXBlID0gX3VzZVBhbmVsQ29udGV4dC5wYW5lbFR5cGUsXG4gICAgbm93ID0gX3VzZVBhbmVsQ29udGV4dC5ub3csXG4gICAgY29udGV4dERpc2FibGVkRGF0ZSA9IF91c2VQYW5lbENvbnRleHQuZGlzYWJsZWREYXRlLFxuICAgIGNlbGxSZW5kZXIgPSBfdXNlUGFuZWxDb250ZXh0LmNlbGxSZW5kZXIsXG4gICAgb25Ib3ZlciA9IF91c2VQYW5lbENvbnRleHQub25Ib3ZlcixcbiAgICBob3ZlclZhbHVlID0gX3VzZVBhbmVsQ29udGV4dC5ob3ZlclZhbHVlLFxuICAgIGhvdmVyUmFuZ2VWYWx1ZSA9IF91c2VQYW5lbENvbnRleHQuaG92ZXJSYW5nZVZhbHVlLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gX3VzZVBhbmVsQ29udGV4dC5nZW5lcmF0ZUNvbmZpZyxcbiAgICB2YWx1ZXMgPSBfdXNlUGFuZWxDb250ZXh0LnZhbHVlcyxcbiAgICBsb2NhbGUgPSBfdXNlUGFuZWxDb250ZXh0LmxvY2FsZSxcbiAgICBvblNlbGVjdCA9IF91c2VQYW5lbENvbnRleHQub25TZWxlY3Q7XG4gIHZhciBtZXJnZWREaXNhYmxlZERhdGUgPSBkaXNhYmxlZERhdGUgfHwgY29udGV4dERpc2FibGVkRGF0ZTtcbiAgdmFyIGNlbGxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWNlbGxcIik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29udGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChQaWNrZXJIYWNrQ29udGV4dCksXG4gICAgb25DZWxsRGJsQ2xpY2sgPSBfUmVhY3QkdXNlQ29udGV4dC5vbkNlbGxEYmxDbGljaztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWF0Y2hWYWx1ZXMgPSBmdW5jdGlvbiBtYXRjaFZhbHVlcyhkYXRlKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5zb21lKGZ1bmN0aW9uIChzaW5nbGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHNpbmdsZVZhbHVlICYmIGlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBkYXRlLCBzaW5nbGVWYWx1ZSwgdHlwZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBCb2R5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJvd3MgPSBbXTtcbiAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgcm93TnVtOyByb3cgKz0gMSkge1xuICAgIHZhciByb3dOb2RlID0gW107XG4gICAgdmFyIHJvd1N0YXJ0RGF0ZSA9IHZvaWQgMDtcbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgIHZhciBvZmZzZXQgPSByb3cgKiBjb2xOdW0gKyBjb2w7XG4gICAgICB2YXIgY3VycmVudERhdGUgPSBnZXRDZWxsRGF0ZShiYXNlRGF0ZSwgb2Zmc2V0KTtcbiAgICAgIHZhciBkaXNhYmxlZCA9IG1lcmdlZERpc2FibGVkRGF0ZSA9PT0gbnVsbCB8fCBtZXJnZWREaXNhYmxlZERhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lcmdlZERpc2FibGVkRGF0ZShjdXJyZW50RGF0ZSwge1xuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9KTtcblxuICAgICAgLy8gUm93IFN0YXJ0IENlbGxcbiAgICAgIGlmIChjb2wgPT09IDApIHtcbiAgICAgICAgcm93U3RhcnREYXRlID0gY3VycmVudERhdGU7XG4gICAgICAgIGlmIChwcmVmaXhDb2x1bW4pIHtcbiAgICAgICAgICByb3dOb2RlLnB1c2gocHJlZml4Q29sdW1uKHJvd1N0YXJ0RGF0ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJhbmdlXG4gICAgICB2YXIgaW5SYW5nZSA9IGZhbHNlO1xuICAgICAgdmFyIHJhbmdlU3RhcnQgPSBmYWxzZTtcbiAgICAgIHZhciByYW5nZUVuZCA9IGZhbHNlO1xuICAgICAgaWYgKGNlbGxTZWxlY3Rpb24gJiYgaG92ZXJSYW5nZVZhbHVlKSB7XG4gICAgICAgIHZhciBfaG92ZXJSYW5nZVZhbHVlID0gX3NsaWNlZFRvQXJyYXkoaG92ZXJSYW5nZVZhbHVlLCAyKSxcbiAgICAgICAgICBob3ZlclN0YXJ0ID0gX2hvdmVyUmFuZ2VWYWx1ZVswXSxcbiAgICAgICAgICBob3ZlckVuZCA9IF9ob3ZlclJhbmdlVmFsdWVbMV07XG4gICAgICAgIGluUmFuZ2UgPSBpc0luUmFuZ2UoZ2VuZXJhdGVDb25maWcsIGhvdmVyU3RhcnQsIGhvdmVyRW5kLCBjdXJyZW50RGF0ZSk7XG4gICAgICAgIHJhbmdlU3RhcnQgPSBpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgY3VycmVudERhdGUsIGhvdmVyU3RhcnQsIHR5cGUpO1xuICAgICAgICByYW5nZUVuZCA9IGlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBjdXJyZW50RGF0ZSwgaG92ZXJFbmQsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaXRsZVxuICAgICAgdmFyIHRpdGxlID0gdGl0bGVGb3JtYXQgPyBmb3JtYXRWYWx1ZShjdXJyZW50RGF0ZSwge1xuICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgZm9ybWF0OiB0aXRsZUZvcm1hdCxcbiAgICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gICAgICB9KSA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gUmVuZGVyXG4gICAgICB2YXIgaW5uZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItaW5uZXJcIilcbiAgICAgIH0sIGdldENlbGxUZXh0KGN1cnJlbnREYXRlKSk7XG4gICAgICByb3dOb2RlLnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidGRcIiwge1xuICAgICAgICBrZXk6IGNvbCxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY2VsbFByZWZpeENscywgX29iamVjdFNwcmVhZChfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSwgXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItaG92ZXJcIiksIChob3ZlclZhbHVlIHx8IFtdKS5zb21lKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBjdXJyZW50RGF0ZSwgZGF0ZSwgdHlwZSk7XG4gICAgICAgIH0pKSwgXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItaW4tcmFuZ2VcIiksIGluUmFuZ2UgJiYgIXJhbmdlU3RhcnQgJiYgIXJhbmdlRW5kKSwgXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItcmFuZ2Utc3RhcnRcIiksIHJhbmdlU3RhcnQpLCBcIlwiLmNvbmNhdChjZWxsUHJlZml4Q2xzLCBcIi1yYW5nZS1lbmRcIiksIHJhbmdlRW5kKSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jZWxsLXNlbGVjdGVkXCIpLCAhaG92ZXJSYW5nZVZhbHVlICYmXG4gICAgICAgIC8vIFdlZWtQaWNrZXIgdXNlIHJvdyBpbnN0ZWFkXG4gICAgICAgIHR5cGUgIT09ICd3ZWVrJyAmJiBtYXRjaFZhbHVlcyhjdXJyZW50RGF0ZSkpLCBnZXRDZWxsQ2xhc3NOYW1lKGN1cnJlbnREYXRlKSkpLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGN1cnJlbnREYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRG91YmxlQ2xpY2s6IGZ1bmN0aW9uIG9uRG91YmxlQ2xpY2soKSB7XG4gICAgICAgICAgaWYgKCFkaXNhYmxlZCAmJiBvbkNlbGxEYmxDbGljaykge1xuICAgICAgICAgICAgb25DZWxsRGJsQ2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIG9uSG92ZXIgPT09IG51bGwgfHwgb25Ib3ZlciA9PT0gdm9pZCAwIHx8IG9uSG92ZXIoY3VycmVudERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25Nb3VzZUxlYXZlOiBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgb25Ib3ZlciA9PT0gbnVsbCB8fCBvbkhvdmVyID09PSB2b2lkIDAgfHwgb25Ib3ZlcihudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIGNlbGxSZW5kZXIgPyBjZWxsUmVuZGVyKGN1cnJlbnREYXRlLCB7XG4gICAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAgICBvcmlnaW5Ob2RlOiBpbm5lcixcbiAgICAgICAgdG9kYXk6IG5vdyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgbG9jYWxlOiBsb2NhbGVcbiAgICAgIH0pIDogaW5uZXIpKTtcbiAgICB9O1xuICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IGNvbE51bTsgY29sICs9IDEpIHtcbiAgICAgIF9sb29wKCk7XG4gICAgfVxuICAgIHJvd3MucHVzaCggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCB7XG4gICAgICBrZXk6IHJvdyxcbiAgICAgIGNsYXNzTmFtZTogcm93Q2xhc3NOYW1lID09PSBudWxsIHx8IHJvd0NsYXNzTmFtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm93Q2xhc3NOYW1lKHJvd1N0YXJ0RGF0ZSlcbiAgICB9LCByb3dOb2RlKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1ib2R5XCIpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidGFibGVcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jb250ZW50XCIpXG4gIH0sIGhlYWRlckNlbGxzICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidGhlYWRcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCBudWxsLCBoZWFkZXJDZWxscykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIG51bGwsIHJvd3MpKSk7XG59IiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1NhbWVPckFmdGVyIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVVdGlsXCI7XG5pbXBvcnQgeyBQaWNrZXJIYWNrQ29udGV4dCwgdXNlUGFuZWxDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiO1xudmFyIEhJRERFTl9TVFlMRSA9IHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn07XG5mdW5jdGlvbiBQYW5lbEhlYWRlcihwcm9wcykge1xuICB2YXIgb2Zmc2V0ID0gcHJvcHMub2Zmc2V0LFxuICAgIHN1cGVyT2Zmc2V0ID0gcHJvcHMuc3VwZXJPZmZzZXQsXG4gICAgb25DaGFuZ2UgPSBwcm9wcy5vbkNoYW5nZSxcbiAgICBnZXRTdGFydCA9IHByb3BzLmdldFN0YXJ0LFxuICAgIGdldEVuZCA9IHByb3BzLmdldEVuZCxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICB2YXIgX3VzZVBhbmVsQ29udGV4dCA9IHVzZVBhbmVsQ29udGV4dCgpLFxuICAgIHByZWZpeENscyA9IF91c2VQYW5lbENvbnRleHQucHJlZml4Q2xzLFxuICAgIF91c2VQYW5lbENvbnRleHQkcHJldiA9IF91c2VQYW5lbENvbnRleHQucHJldkljb24sXG4gICAgcHJldkljb24gPSBfdXNlUGFuZWxDb250ZXh0JHByZXYgPT09IHZvaWQgMCA/IFwiXFx1MjAzOVwiIDogX3VzZVBhbmVsQ29udGV4dCRwcmV2LFxuICAgIF91c2VQYW5lbENvbnRleHQkbmV4dCA9IF91c2VQYW5lbENvbnRleHQubmV4dEljb24sXG4gICAgbmV4dEljb24gPSBfdXNlUGFuZWxDb250ZXh0JG5leHQgPT09IHZvaWQgMCA/IFwiXFx1MjAzQVwiIDogX3VzZVBhbmVsQ29udGV4dCRuZXh0LFxuICAgIF91c2VQYW5lbENvbnRleHQkc3VwZSA9IF91c2VQYW5lbENvbnRleHQuc3VwZXJQcmV2SWNvbixcbiAgICBzdXBlclByZXZJY29uID0gX3VzZVBhbmVsQ29udGV4dCRzdXBlID09PSB2b2lkIDAgPyBcIlxceEFCXCIgOiBfdXNlUGFuZWxDb250ZXh0JHN1cGUsXG4gICAgX3VzZVBhbmVsQ29udGV4dCRzdXBlMiA9IF91c2VQYW5lbENvbnRleHQuc3VwZXJOZXh0SWNvbixcbiAgICBzdXBlck5leHRJY29uID0gX3VzZVBhbmVsQ29udGV4dCRzdXBlMiA9PT0gdm9pZCAwID8gXCJcXHhCQlwiIDogX3VzZVBhbmVsQ29udGV4dCRzdXBlMixcbiAgICBtaW5EYXRlID0gX3VzZVBhbmVsQ29udGV4dC5taW5EYXRlLFxuICAgIG1heERhdGUgPSBfdXNlUGFuZWxDb250ZXh0Lm1heERhdGUsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBfdXNlUGFuZWxDb250ZXh0LmdlbmVyYXRlQ29uZmlnLFxuICAgIGxvY2FsZSA9IF91c2VQYW5lbENvbnRleHQubG9jYWxlLFxuICAgIHBpY2tlclZhbHVlID0gX3VzZVBhbmVsQ29udGV4dC5waWNrZXJWYWx1ZSxcbiAgICB0eXBlID0gX3VzZVBhbmVsQ29udGV4dC5wYW5lbFR5cGU7XG4gIHZhciBoZWFkZXJQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWhlYWRlclwiKTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChQaWNrZXJIYWNrQ29udGV4dCksXG4gICAgaGlkZVByZXYgPSBfUmVhY3QkdXNlQ29udGV4dC5oaWRlUHJldixcbiAgICBoaWRlTmV4dCA9IF9SZWFjdCR1c2VDb250ZXh0LmhpZGVOZXh0LFxuICAgIGhpZGVIZWFkZXIgPSBfUmVhY3QkdXNlQ29udGV4dC5oaWRlSGVhZGVyO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IExpbWl0YXRpb24gPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGRpc2FibGVkT2Zmc2V0UHJldiA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWluRGF0ZSB8fCAhb2Zmc2V0IHx8ICFnZXRFbmQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHByZXZQYW5lbExpbWl0RGF0ZSA9IGdldEVuZChvZmZzZXQoLTEsIHBpY2tlclZhbHVlKSk7XG4gICAgcmV0dXJuICFpc1NhbWVPckFmdGVyKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIHByZXZQYW5lbExpbWl0RGF0ZSwgbWluRGF0ZSwgdHlwZSk7XG4gIH0sIFttaW5EYXRlLCBvZmZzZXQsIHBpY2tlclZhbHVlLCBnZXRFbmQsIGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIHR5cGVdKTtcbiAgdmFyIGRpc2FibGVkU3VwZXJPZmZzZXRQcmV2ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtaW5EYXRlIHx8ICFzdXBlck9mZnNldCB8fCAhZ2V0RW5kKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBwcmV2UGFuZWxMaW1pdERhdGUgPSBnZXRFbmQoc3VwZXJPZmZzZXQoLTEsIHBpY2tlclZhbHVlKSk7XG4gICAgcmV0dXJuICFpc1NhbWVPckFmdGVyKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIHByZXZQYW5lbExpbWl0RGF0ZSwgbWluRGF0ZSwgdHlwZSk7XG4gIH0sIFttaW5EYXRlLCBzdXBlck9mZnNldCwgcGlja2VyVmFsdWUsIGdldEVuZCwgZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgdHlwZV0pO1xuICB2YXIgZGlzYWJsZWRPZmZzZXROZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFtYXhEYXRlIHx8ICFvZmZzZXQgfHwgIWdldFN0YXJ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBuZXh0UGFuZWxMaW1pdERhdGUgPSBnZXRTdGFydChvZmZzZXQoMSwgcGlja2VyVmFsdWUpKTtcbiAgICByZXR1cm4gIWlzU2FtZU9yQWZ0ZXIoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgbWF4RGF0ZSwgbmV4dFBhbmVsTGltaXREYXRlLCB0eXBlKTtcbiAgfSwgW21heERhdGUsIG9mZnNldCwgcGlja2VyVmFsdWUsIGdldFN0YXJ0LCBnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCB0eXBlXSk7XG4gIHZhciBkaXNhYmxlZFN1cGVyT2Zmc2V0TmV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghbWF4RGF0ZSB8fCAhc3VwZXJPZmZzZXQgfHwgIWdldFN0YXJ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBuZXh0UGFuZWxMaW1pdERhdGUgPSBnZXRTdGFydChzdXBlck9mZnNldCgxLCBwaWNrZXJWYWx1ZSkpO1xuICAgIHJldHVybiAhaXNTYW1lT3JBZnRlcihnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBtYXhEYXRlLCBuZXh0UGFuZWxMaW1pdERhdGUsIHR5cGUpO1xuICB9LCBbbWF4RGF0ZSwgc3VwZXJPZmZzZXQsIHBpY2tlclZhbHVlLCBnZXRTdGFydCwgZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgdHlwZV0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gT2Zmc2V0ID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uT2Zmc2V0ID0gZnVuY3Rpb24gb25PZmZzZXQoZGlzdGFuY2UpIHtcbiAgICBpZiAob2Zmc2V0KSB7XG4gICAgICBvbkNoYW5nZShvZmZzZXQoZGlzdGFuY2UsIHBpY2tlclZhbHVlKSk7XG4gICAgfVxuICB9O1xuICB2YXIgb25TdXBlck9mZnNldCA9IGZ1bmN0aW9uIG9uU3VwZXJPZmZzZXQoZGlzdGFuY2UpIHtcbiAgICBpZiAoc3VwZXJPZmZzZXQpIHtcbiAgICAgIG9uQ2hhbmdlKHN1cGVyT2Zmc2V0KGRpc3RhbmNlLCBwaWNrZXJWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChoaWRlSGVhZGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHByZXZCdG5DbHMgPSBcIlwiLmNvbmNhdChoZWFkZXJQcmVmaXhDbHMsIFwiLXByZXYtYnRuXCIpO1xuICB2YXIgbmV4dEJ0bkNscyA9IFwiXCIuY29uY2F0KGhlYWRlclByZWZpeENscywgXCItbmV4dC1idG5cIik7XG4gIHZhciBzdXBlclByZXZCdG5DbHMgPSBcIlwiLmNvbmNhdChoZWFkZXJQcmVmaXhDbHMsIFwiLXN1cGVyLXByZXYtYnRuXCIpO1xuICB2YXIgc3VwZXJOZXh0QnRuQ2xzID0gXCJcIi5jb25jYXQoaGVhZGVyUHJlZml4Q2xzLCBcIi1zdXBlci1uZXh0LWJ0blwiKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGhlYWRlclByZWZpeENsc1xuICB9LCBzdXBlck9mZnNldCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBcImFyaWEtbGFiZWxcIjogbG9jYWxlLnByZXZpb3VzWWVhcixcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgcmV0dXJuIG9uU3VwZXJPZmZzZXQoLTEpO1xuICAgIH0sXG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhzdXBlclByZXZCdG5DbHMsIGRpc2FibGVkU3VwZXJPZmZzZXRQcmV2ICYmIFwiXCIuY29uY2F0KHN1cGVyUHJldkJ0bkNscywgXCItZGlzYWJsZWRcIikpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFN1cGVyT2Zmc2V0UHJldixcbiAgICBzdHlsZTogaGlkZVByZXYgPyBISURERU5fU1RZTEUgOiB7fVxuICB9LCBzdXBlclByZXZJY29uKSwgb2Zmc2V0ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsb2NhbGUucHJldmlvdXNNb250aCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgcmV0dXJuIG9uT2Zmc2V0KC0xKTtcbiAgICB9LFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocHJldkJ0bkNscywgZGlzYWJsZWRPZmZzZXRQcmV2ICYmIFwiXCIuY29uY2F0KHByZXZCdG5DbHMsIFwiLWRpc2FibGVkXCIpKSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRPZmZzZXRQcmV2LFxuICAgIHN0eWxlOiBoaWRlUHJldiA/IEhJRERFTl9TVFlMRSA6IHt9XG4gIH0sIHByZXZJY29uKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoaGVhZGVyUHJlZml4Q2xzLCBcIi12aWV3XCIpXG4gIH0sIGNoaWxkcmVuKSwgb2Zmc2V0ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsb2NhbGUubmV4dE1vbnRoLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICByZXR1cm4gb25PZmZzZXQoMSk7XG4gICAgfSxcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKG5leHRCdG5DbHMsIGRpc2FibGVkT2Zmc2V0TmV4dCAmJiBcIlwiLmNvbmNhdChuZXh0QnRuQ2xzLCBcIi1kaXNhYmxlZFwiKSksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkT2Zmc2V0TmV4dCxcbiAgICBzdHlsZTogaGlkZU5leHQgPyBISURERU5fU1RZTEUgOiB7fVxuICB9LCBuZXh0SWNvbiksIHN1cGVyT2Zmc2V0ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsb2NhbGUubmV4dFllYXIsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgIHJldHVybiBvblN1cGVyT2Zmc2V0KDEpO1xuICAgIH0sXG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhzdXBlck5leHRCdG5DbHMsIGRpc2FibGVkU3VwZXJPZmZzZXROZXh0ICYmIFwiXCIuY29uY2F0KHN1cGVyTmV4dEJ0bkNscywgXCItZGlzYWJsZWRcIikpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFN1cGVyT2Zmc2V0TmV4dCxcbiAgICBzdHlsZTogaGlkZU5leHQgPyBISURERU5fU1RZTEUgOiB7fVxuICB9LCBzdXBlck5leHRJY29uKSk7XG59XG5leHBvcnQgZGVmYXVsdCBQYW5lbEhlYWRlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcm1hdFZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGVVdGlsXCI7XG5pbXBvcnQgeyBQYW5lbENvbnRleHQsIHVzZUluZm8gfSBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IFBhbmVsQm9keSBmcm9tIFwiLi4vUGFuZWxCb2R5XCI7XG5pbXBvcnQgUGFuZWxIZWFkZXIgZnJvbSBcIi4uL1BhbmVsSGVhZGVyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBRdWFydGVyUGFuZWwocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBsb2NhbGUgPSBwcm9wcy5sb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBwcm9wcy5nZW5lcmF0ZUNvbmZpZyxcbiAgICBwaWNrZXJWYWx1ZSA9IHByb3BzLnBpY2tlclZhbHVlLFxuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UgPSBwcm9wcy5vblBpY2tlclZhbHVlQ2hhbmdlLFxuICAgIG9uTW9kZUNoYW5nZSA9IHByb3BzLm9uTW9kZUNoYW5nZTtcbiAgdmFyIHBhbmVsUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1xdWFydGVyLXBhbmVsXCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IEJhc2UgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VJbmZvID0gdXNlSW5mbyhwcm9wcywgJ3F1YXJ0ZXInKSxcbiAgICBfdXNlSW5mbzIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5mbywgMSksXG4gICAgaW5mbyA9IF91c2VJbmZvMlswXTtcbiAgdmFyIGJhc2VEYXRlID0gZ2VuZXJhdGVDb25maWcuc2V0TW9udGgocGlja2VyVmFsdWUsIDApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gQ2VsbHMgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldENlbGxEYXRlID0gZnVuY3Rpb24gZ2V0Q2VsbERhdGUoZGF0ZSwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZE1vbnRoKGRhdGUsIG9mZnNldCAqIDMpO1xuICB9O1xuICB2YXIgZ2V0Q2VsbFRleHQgPSBmdW5jdGlvbiBnZXRDZWxsVGV4dChkYXRlKSB7XG4gICAgcmV0dXJuIGZvcm1hdFZhbHVlKGRhdGUsIHtcbiAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgZm9ybWF0OiBsb2NhbGUuY2VsbFF1YXJ0ZXJGb3JtYXQsXG4gICAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWdcbiAgICB9KTtcbiAgfTtcbiAgdmFyIGdldENlbGxDbGFzc05hbWUgPSBmdW5jdGlvbiBnZXRDZWxsQ2xhc3NOYW1lKCkge1xuICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2VsbC1pbi12aWV3XCIpLCB0cnVlKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEhlYWRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB5ZWFyTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGtleTogXCJ5ZWFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxvY2FsZS55ZWFyU2VsZWN0LFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICBvbk1vZGVDaGFuZ2UoJ3llYXInKTtcbiAgICB9LFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCIteWVhci1idG5cIilcbiAgfSwgZm9ybWF0VmFsdWUocGlja2VyVmFsdWUsIHtcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBmb3JtYXQ6IGxvY2FsZS55ZWFyRm9ybWF0LFxuICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGluZm9cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogcGFuZWxQcmVmaXhDbHNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxIZWFkZXIsIHtcbiAgICBzdXBlck9mZnNldDogZnVuY3Rpb24gc3VwZXJPZmZzZXQoZGlzdGFuY2UpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKHBpY2tlclZhbHVlLCBkaXN0YW5jZSk7XG4gICAgfSxcbiAgICBvbkNoYW5nZTogb25QaWNrZXJWYWx1ZUNoYW5nZVxuICAgIC8vIExpbWl0YXRpb25cbiAgICAsXG4gICAgZ2V0U3RhcnQ6IGZ1bmN0aW9uIGdldFN0YXJ0KGRhdGUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5zZXRNb250aChkYXRlLCAwKTtcbiAgICB9LFxuICAgIGdldEVuZDogZnVuY3Rpb24gZ2V0RW5kKGRhdGUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5zZXRNb250aChkYXRlLCAxMSk7XG4gICAgfVxuICB9LCB5ZWFyTm9kZSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQm9keSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdGl0bGVGb3JtYXQ6IGxvY2FsZS5maWVsZFF1YXJ0ZXJGb3JtYXQsXG4gICAgY29sTnVtOiA0LFxuICAgIHJvd051bTogMSxcbiAgICBiYXNlRGF0ZTogYmFzZURhdGVcbiAgICAvLyBCb2R5XG4gICAgLFxuICAgIGdldENlbGxEYXRlOiBnZXRDZWxsRGF0ZSxcbiAgICBnZXRDZWxsVGV4dDogZ2V0Q2VsbFRleHQsXG4gICAgZ2V0Q2VsbENsYXNzTmFtZTogZ2V0Q2VsbENsYXNzTmFtZVxuICB9KSkpKTtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgdXNlTGF5b3V0RWZmZWN0IGZyb20gXCJyYy11dGlsL2VzL2hvb2tzL3VzZUxheW91dEVmZmVjdFwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUGFuZWxDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2NvbnRleHRcIjtcbmltcG9ydCB1c2VTY3JvbGxUbyBmcm9tIFwiLi91c2VTY3JvbGxUb1wiO1xudmFyIFNDUk9MTF9ERUxBWSA9IDMwMDtcbi8vIE5vdCB1c2UgSlNPTi5zdHJpbmdpZnkgdG8gYXZvaWQgZGVhZCBsb29wXG5mdW5jdGlvbiBmbGF0dGVuVW5pdHModW5pdHMpIHtcbiAgcmV0dXJuIHVuaXRzLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQ7XG4gICAgcmV0dXJuIFt2YWx1ZSwgbGFiZWwsIGRpc2FibGVkXS5qb2luKCcsJyk7XG4gIH0pLmpvaW4oJzsnKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRpbWVDb2x1bW4ocHJvcHMpIHtcbiAgdmFyIHVuaXRzID0gcHJvcHMudW5pdHMsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICBvcHRpb25hbFZhbHVlID0gcHJvcHMub3B0aW9uYWxWYWx1ZSxcbiAgICB0eXBlID0gcHJvcHMudHlwZSxcbiAgICBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uSG92ZXIgPSBwcm9wcy5vbkhvdmVyLFxuICAgIG9uRGJsQ2xpY2sgPSBwcm9wcy5vbkRibENsaWNrLFxuICAgIGNoYW5nZU9uU2Nyb2xsID0gcHJvcHMuY2hhbmdlT25TY3JvbGw7XG4gIHZhciBfdXNlUGFuZWxDb250ZXh0ID0gdXNlUGFuZWxDb250ZXh0KCksXG4gICAgcHJlZml4Q2xzID0gX3VzZVBhbmVsQ29udGV4dC5wcmVmaXhDbHMsXG4gICAgY2VsbFJlbmRlciA9IF91c2VQYW5lbENvbnRleHQuY2VsbFJlbmRlcixcbiAgICBub3cgPSBfdXNlUGFuZWxDb250ZXh0Lm5vdyxcbiAgICBsb2NhbGUgPSBfdXNlUGFuZWxDb250ZXh0LmxvY2FsZTtcbiAgdmFyIHBhbmVsUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi10aW1lLXBhbmVsXCIpO1xuICB2YXIgY2VsbFByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItdGltZS1wYW5lbC1jZWxsXCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHVsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gU2Nyb2xsID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGNoZWNrRGVsYXlSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGNsZWFyRGVsYXlDaGVjayA9IGZ1bmN0aW9uIGNsZWFyRGVsYXlDaGVjaygpIHtcbiAgICBjbGVhclRpbWVvdXQoY2hlY2tEZWxheVJlZi5jdXJyZW50KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBTeW5jID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlU2Nyb2xsVG8gPSB1c2VTY3JvbGxUbyh1bFJlZiwgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogb3B0aW9uYWxWYWx1ZSksXG4gICAgX3VzZVNjcm9sbFRvMiA9IF9zbGljZWRUb0FycmF5KF91c2VTY3JvbGxUbywgMyksXG4gICAgc3luY1Njcm9sbCA9IF91c2VTY3JvbGxUbzJbMF0sXG4gICAgc3RvcFNjcm9sbCA9IF91c2VTY3JvbGxUbzJbMV0sXG4gICAgaXNTY3JvbGxpbmcgPSBfdXNlU2Nyb2xsVG8yWzJdO1xuXG4gIC8vIEVmZmVjdCBzeW5jIHZhbHVlIHNjcm9sbFxuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHN5bmNTY3JvbGwoKTtcbiAgICBjbGVhckRlbGF5Q2hlY2soKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc3RvcFNjcm9sbCgpO1xuICAgICAgY2xlYXJEZWxheUNoZWNrKCk7XG4gICAgfTtcbiAgfSwgW3ZhbHVlLCBvcHRpb25hbFZhbHVlLCBmbGF0dGVuVW5pdHModW5pdHMpXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTY3JvbGwgZXZlbnQgaWYgc3luYyBvblNjcm9sbFxuICB2YXIgb25JbnRlcm5hbFNjcm9sbCA9IGZ1bmN0aW9uIG9uSW50ZXJuYWxTY3JvbGwoZXZlbnQpIHtcbiAgICBjbGVhckRlbGF5Q2hlY2soKTtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghaXNTY3JvbGxpbmcoKSAmJiBjaGFuZ2VPblNjcm9sbCkge1xuICAgICAgY2hlY2tEZWxheVJlZi5jdXJyZW50ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1bCA9IHVsUmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBmaXJzdExpVG9wID0gdWwucXVlcnlTZWxlY3RvcihcImxpXCIpLm9mZnNldFRvcDtcbiAgICAgICAgdmFyIGxpTGlzdCA9IEFycmF5LmZyb20odWwucXVlcnlTZWxlY3RvckFsbChcImxpXCIpKTtcbiAgICAgICAgdmFyIGxpVG9wTGlzdCA9IGxpTGlzdC5tYXAoZnVuY3Rpb24gKGxpKSB7XG4gICAgICAgICAgcmV0dXJuIGxpLm9mZnNldFRvcCAtIGZpcnN0TGlUb3A7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbGlEaXN0TGlzdCA9IGxpVG9wTGlzdC5tYXAoZnVuY3Rpb24gKHRvcCwgaW5kZXgpIHtcbiAgICAgICAgICBpZiAodW5pdHNbaW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0b3AgLSB0YXJnZXQuc2Nyb2xsVG9wKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRmluZCBtaW4gZGlzdGFuY2UgaW5kZXhcbiAgICAgICAgdmFyIG1pbkRpc3QgPSBNYXRoLm1pbi5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkobGlEaXN0TGlzdCkpO1xuICAgICAgICB2YXIgbWluRGlzdEluZGV4ID0gbGlEaXN0TGlzdC5maW5kSW5kZXgoZnVuY3Rpb24gKGRpc3QpIHtcbiAgICAgICAgICByZXR1cm4gZGlzdCA9PT0gbWluRGlzdDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0YXJnZXRVbml0ID0gdW5pdHNbbWluRGlzdEluZGV4XTtcbiAgICAgICAgaWYgKHRhcmdldFVuaXQgJiYgIXRhcmdldFVuaXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBvbkNoYW5nZSh0YXJnZXRVbml0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgU0NST0xMX0RFTEFZKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY29sdW1uUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocGFuZWxQcmVmaXhDbHMsIFwiLWNvbHVtblwiKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwge1xuICAgIGNsYXNzTmFtZTogY29sdW1uUHJlZml4Q2xzLFxuICAgIHJlZjogdWxSZWYsXG4gICAgXCJkYXRhLXR5cGVcIjogdHlwZSxcbiAgICBvblNjcm9sbDogb25JbnRlcm5hbFNjcm9sbFxuICB9LCB1bml0cy5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGxhYmVsID0gX3JlZjIubGFiZWwsXG4gICAgICB1bml0VmFsdWUgPSBfcmVmMi52YWx1ZSxcbiAgICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG4gICAgdmFyIGlubmVyID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjZWxsUHJlZml4Q2xzLCBcIi1pbm5lclwiKVxuICAgIH0sIGxhYmVsKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7XG4gICAgICBrZXk6IHVuaXRWYWx1ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhjZWxsUHJlZml4Q2xzLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChjZWxsUHJlZml4Q2xzLCBcIi1zZWxlY3RlZFwiKSwgdmFsdWUgPT09IHVuaXRWYWx1ZSksIFwiXCIuY29uY2F0KGNlbGxQcmVmaXhDbHMsIFwiLWRpc2FibGVkXCIpLCBkaXNhYmxlZCkpLFxuICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgIG9uQ2hhbmdlKHVuaXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkRvdWJsZUNsaWNrOiBmdW5jdGlvbiBvbkRvdWJsZUNsaWNrKCkge1xuICAgICAgICBpZiAoIWRpc2FibGVkICYmIG9uRGJsQ2xpY2spIHtcbiAgICAgICAgICBvbkRibENsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcigpIHtcbiAgICAgICAgb25Ib3Zlcih1bml0VmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICBvbkhvdmVyKG51bGwpO1xuICAgICAgfSxcbiAgICAgIFwiZGF0YS12YWx1ZVwiOiB1bml0VmFsdWVcbiAgICB9LCBjZWxsUmVuZGVyID8gY2VsbFJlbmRlcih1bml0VmFsdWUsIHtcbiAgICAgIHByZWZpeENsczogcHJlZml4Q2xzLFxuICAgICAgb3JpZ2luTm9kZTogaW5uZXIsXG4gICAgICB0b2RheTogbm93LFxuICAgICAgdHlwZTogJ3RpbWUnLFxuICAgICAgc3ViVHlwZTogdHlwZSxcbiAgICAgIGxvY2FsZTogbG9jYWxlXG4gICAgfSkgOiBpbm5lcik7XG4gIH0pKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZVRpbWVJbmZvIGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VUaW1lSW5mb1wiO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBpY2tlckhhY2tDb250ZXh0LCB1c2VQYW5lbENvbnRleHQgfSBmcm9tIFwiLi4vLi4vY29udGV4dFwiO1xuaW1wb3J0IFRpbWVDb2x1bW4gZnJvbSBcIi4vVGltZUNvbHVtblwiO1xuZnVuY3Rpb24gaXNBTShob3VyKSB7XG4gIHJldHVybiBob3VyIDwgMTI7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUaW1lUGFuZWxCb2R5KHByb3BzKSB7XG4gIHZhciBzaG93SG91ciA9IHByb3BzLnNob3dIb3VyLFxuICAgIHNob3dNaW51dGUgPSBwcm9wcy5zaG93TWludXRlLFxuICAgIHNob3dTZWNvbmQgPSBwcm9wcy5zaG93U2Vjb25kLFxuICAgIHNob3dNaWxsaXNlY29uZCA9IHByb3BzLnNob3dNaWxsaXNlY29uZCxcbiAgICBzaG93TWVyaWRpZW0gPSBwcm9wcy51c2UxMkhvdXJzLFxuICAgIGNoYW5nZU9uU2Nyb2xsID0gcHJvcHMuY2hhbmdlT25TY3JvbGw7XG4gIHZhciBfdXNlUGFuZWxDb250ZXh0ID0gdXNlUGFuZWxDb250ZXh0KCksXG4gICAgcHJlZml4Q2xzID0gX3VzZVBhbmVsQ29udGV4dC5wcmVmaXhDbHMsXG4gICAgdmFsdWVzID0gX3VzZVBhbmVsQ29udGV4dC52YWx1ZXMsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBfdXNlUGFuZWxDb250ZXh0LmdlbmVyYXRlQ29uZmlnLFxuICAgIGxvY2FsZSA9IF91c2VQYW5lbENvbnRleHQubG9jYWxlLFxuICAgIG9uU2VsZWN0ID0gX3VzZVBhbmVsQ29udGV4dC5vblNlbGVjdCxcbiAgICBfdXNlUGFuZWxDb250ZXh0JG9uSG8gPSBfdXNlUGFuZWxDb250ZXh0Lm9uSG92ZXIsXG4gICAgb25Ib3ZlciA9IF91c2VQYW5lbENvbnRleHQkb25IbyA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkge30gOiBfdXNlUGFuZWxDb250ZXh0JG9uSG8sXG4gICAgcGlja2VyVmFsdWUgPSBfdXNlUGFuZWxDb250ZXh0LnBpY2tlclZhbHVlO1xuICB2YXIgdmFsdWUgPSAodmFsdWVzID09PSBudWxsIHx8IHZhbHVlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWVzWzBdKSB8fCBudWxsO1xuICB2YXIgX1JlYWN0JHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFBpY2tlckhhY2tDb250ZXh0KSxcbiAgICBvbkNlbGxEYmxDbGljayA9IF9SZWFjdCR1c2VDb250ZXh0Lm9uQ2VsbERibENsaWNrO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IEluZm8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VUaW1lSW5mbyA9IHVzZVRpbWVJbmZvKGdlbmVyYXRlQ29uZmlnLCBwcm9wcywgdmFsdWUpLFxuICAgIF91c2VUaW1lSW5mbzIgPSBfc2xpY2VkVG9BcnJheShfdXNlVGltZUluZm8sIDUpLFxuICAgIGdldFZhbGlkVGltZSA9IF91c2VUaW1lSW5mbzJbMF0sXG4gICAgcm93SG91clVuaXRzID0gX3VzZVRpbWVJbmZvMlsxXSxcbiAgICBnZXRNaW51dGVVbml0cyA9IF91c2VUaW1lSW5mbzJbMl0sXG4gICAgZ2V0U2Vjb25kVW5pdHMgPSBfdXNlVGltZUluZm8yWzNdLFxuICAgIGdldE1pbGxpc2Vjb25kVW5pdHMgPSBfdXNlVGltZUluZm8yWzRdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGlja2VyVmFsdWUgd2lsbCB0ZWxsIHdoaWNoIG9uZSB0byBhbGlnbiBvbiB0aGUgdG9wXG4gIHZhciBnZXRVbml0VmFsdWUgPSBmdW5jdGlvbiBnZXRVbml0VmFsdWUoZnVuYykge1xuICAgIHZhciB2YWx1ZVVuaXRWYWwgPSB2YWx1ZSAmJiBnZW5lcmF0ZUNvbmZpZ1tmdW5jXSh2YWx1ZSk7XG4gICAgdmFyIHBpY2tlclVuaXRWYWx1ZSA9IHBpY2tlclZhbHVlICYmIGdlbmVyYXRlQ29uZmlnW2Z1bmNdKHBpY2tlclZhbHVlKTtcbiAgICByZXR1cm4gW3ZhbHVlVW5pdFZhbCwgcGlja2VyVW5pdFZhbHVlXTtcbiAgfTtcbiAgdmFyIF9nZXRVbml0VmFsdWUgPSBnZXRVbml0VmFsdWUoJ2dldEhvdXInKSxcbiAgICBfZ2V0VW5pdFZhbHVlMiA9IF9zbGljZWRUb0FycmF5KF9nZXRVbml0VmFsdWUsIDIpLFxuICAgIGhvdXIgPSBfZ2V0VW5pdFZhbHVlMlswXSxcbiAgICBwaWNrZXJIb3VyID0gX2dldFVuaXRWYWx1ZTJbMV07XG4gIHZhciBfZ2V0VW5pdFZhbHVlMyA9IGdldFVuaXRWYWx1ZSgnZ2V0TWludXRlJyksXG4gICAgX2dldFVuaXRWYWx1ZTQgPSBfc2xpY2VkVG9BcnJheShfZ2V0VW5pdFZhbHVlMywgMiksXG4gICAgbWludXRlID0gX2dldFVuaXRWYWx1ZTRbMF0sXG4gICAgcGlja2VyTWludXRlID0gX2dldFVuaXRWYWx1ZTRbMV07XG4gIHZhciBfZ2V0VW5pdFZhbHVlNSA9IGdldFVuaXRWYWx1ZSgnZ2V0U2Vjb25kJyksXG4gICAgX2dldFVuaXRWYWx1ZTYgPSBfc2xpY2VkVG9BcnJheShfZ2V0VW5pdFZhbHVlNSwgMiksXG4gICAgc2Vjb25kID0gX2dldFVuaXRWYWx1ZTZbMF0sXG4gICAgcGlja2VyU2Vjb25kID0gX2dldFVuaXRWYWx1ZTZbMV07XG4gIHZhciBfZ2V0VW5pdFZhbHVlNyA9IGdldFVuaXRWYWx1ZSgnZ2V0TWlsbGlzZWNvbmQnKSxcbiAgICBfZ2V0VW5pdFZhbHVlOCA9IF9zbGljZWRUb0FycmF5KF9nZXRVbml0VmFsdWU3LCAyKSxcbiAgICBtaWxsaXNlY29uZCA9IF9nZXRVbml0VmFsdWU4WzBdLFxuICAgIHBpY2tlck1pbGxpc2Vjb25kID0gX2dldFVuaXRWYWx1ZThbMV07XG4gIHZhciBtZXJpZGllbSA9IGhvdXIgPT09IG51bGwgPyBudWxsIDogaXNBTShob3VyKSA/ICdhbScgOiAncG0nO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sdW1uID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSG91cnNcbiAgdmFyIGhvdXJVbml0cyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2hvd01lcmlkaWVtKSB7XG4gICAgICByZXR1cm4gcm93SG91clVuaXRzO1xuICAgIH1cbiAgICByZXR1cm4gaXNBTShob3VyKSA/IHJvd0hvdXJVbml0cy5maWx0ZXIoZnVuY3Rpb24gKGgpIHtcbiAgICAgIHJldHVybiBpc0FNKGgudmFsdWUpO1xuICAgIH0pIDogcm93SG91clVuaXRzLmZpbHRlcihmdW5jdGlvbiAoaCkge1xuICAgICAgcmV0dXJuICFpc0FNKGgudmFsdWUpO1xuICAgIH0pO1xuICB9LCBbaG91ciwgcm93SG91clVuaXRzLCBzaG93TWVyaWRpZW1dKTtcblxuICAvLyA+Pj4gUGljayBGYWxsYmFja1xuICB2YXIgZ2V0RW5hYmxlZCA9IGZ1bmN0aW9uIGdldEVuYWJsZWQodW5pdHMsIHZhbCkge1xuICAgIHZhciBfZW5hYmxlZFVuaXRzJDtcbiAgICB2YXIgZW5hYmxlZFVuaXRzID0gdW5pdHMuZmlsdGVyKGZ1bmN0aW9uICh1bml0KSB7XG4gICAgICByZXR1cm4gIXVuaXQuZGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHZvaWQgMCA/IHZhbCA6IC8vIEZhbGxiYWNrIHRvIGVuYWJsZWQgdmFsdWVcbiAgICBlbmFibGVkVW5pdHMgPT09IG51bGwgfHwgZW5hYmxlZFVuaXRzID09PSB2b2lkIDAgfHwgKF9lbmFibGVkVW5pdHMkID0gZW5hYmxlZFVuaXRzWzBdKSA9PT0gbnVsbCB8fCBfZW5hYmxlZFVuaXRzJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2VuYWJsZWRVbml0cyQudmFsdWU7XG4gIH07XG5cbiAgLy8gPj4+IE1pbnV0ZXNcbiAgdmFyIHZhbGlkSG91ciA9IGdldEVuYWJsZWQocm93SG91clVuaXRzLCBob3VyKTtcbiAgdmFyIG1pbnV0ZVVuaXRzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE1pbnV0ZVVuaXRzKHZhbGlkSG91cik7XG4gIH0sIFtnZXRNaW51dGVVbml0cywgdmFsaWRIb3VyXSk7XG5cbiAgLy8gPj4+IFNlY29uZHNcbiAgdmFyIHZhbGlkTWludXRlID0gZ2V0RW5hYmxlZChtaW51dGVVbml0cywgbWludXRlKTtcbiAgdmFyIHNlY29uZFVuaXRzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldFNlY29uZFVuaXRzKHZhbGlkSG91ciwgdmFsaWRNaW51dGUpO1xuICB9LCBbZ2V0U2Vjb25kVW5pdHMsIHZhbGlkSG91ciwgdmFsaWRNaW51dGVdKTtcblxuICAvLyA+Pj4gTWlsbGlzZWNvbmRzXG4gIHZhciB2YWxpZFNlY29uZCA9IGdldEVuYWJsZWQoc2Vjb25kVW5pdHMsIHNlY29uZCk7XG4gIHZhciBtaWxsaXNlY29uZFVuaXRzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE1pbGxpc2Vjb25kVW5pdHModmFsaWRIb3VyLCB2YWxpZE1pbnV0ZSwgdmFsaWRTZWNvbmQpO1xuICB9LCBbZ2V0TWlsbGlzZWNvbmRVbml0cywgdmFsaWRIb3VyLCB2YWxpZE1pbnV0ZSwgdmFsaWRTZWNvbmRdKTtcbiAgdmFyIHZhbGlkTWlsbGlzZWNvbmQgPSBnZXRFbmFibGVkKG1pbGxpc2Vjb25kVW5pdHMsIG1pbGxpc2Vjb25kKTtcblxuICAvLyBNZXJpZGllbVxuICB2YXIgbWVyaWRpZW1Vbml0cyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIGlmICghc2hvd01lcmlkaWVtKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHZhciBiYXNlID0gZ2VuZXJhdGVDb25maWcuZ2V0Tm93KCk7XG4gICAgdmFyIGFtRGF0ZSA9IGdlbmVyYXRlQ29uZmlnLnNldEhvdXIoYmFzZSwgNik7XG4gICAgdmFyIHBtRGF0ZSA9IGdlbmVyYXRlQ29uZmlnLnNldEhvdXIoYmFzZSwgMTgpO1xuICAgIHZhciBmb3JtYXRNZXJpZGllbSA9IGZ1bmN0aW9uIGZvcm1hdE1lcmlkaWVtKGRhdGUsIGRlZmF1bHRMYWJlbCkge1xuICAgICAgdmFyIGNlbGxNZXJpZGllbUZvcm1hdCA9IGxvY2FsZS5jZWxsTWVyaWRpZW1Gb3JtYXQ7XG4gICAgICByZXR1cm4gY2VsbE1lcmlkaWVtRm9ybWF0ID8gZm9ybWF0VmFsdWUoZGF0ZSwge1xuICAgICAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWcsXG4gICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICBmb3JtYXQ6IGNlbGxNZXJpZGllbUZvcm1hdFxuICAgICAgfSkgOiBkZWZhdWx0TGFiZWw7XG4gICAgfTtcbiAgICByZXR1cm4gW3tcbiAgICAgIGxhYmVsOiBmb3JtYXRNZXJpZGllbShhbURhdGUsICdBTScpLFxuICAgICAgdmFsdWU6ICdhbScsXG4gICAgICBkaXNhYmxlZDogcm93SG91clVuaXRzLmV2ZXJ5KGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHJldHVybiBoLmRpc2FibGVkIHx8ICFpc0FNKGgudmFsdWUpO1xuICAgICAgfSlcbiAgICB9LCB7XG4gICAgICBsYWJlbDogZm9ybWF0TWVyaWRpZW0ocG1EYXRlLCAnUE0nKSxcbiAgICAgIHZhbHVlOiAncG0nLFxuICAgICAgZGlzYWJsZWQ6IHJvd0hvdXJVbml0cy5ldmVyeShmdW5jdGlvbiAoaCkge1xuICAgICAgICByZXR1cm4gaC5kaXNhYmxlZCB8fCBpc0FNKGgudmFsdWUpO1xuICAgICAgfSlcbiAgICB9XTtcbiAgfSwgW3Jvd0hvdXJVbml0cywgc2hvd01lcmlkaWVtLCBnZW5lcmF0ZUNvbmZpZywgbG9jYWxlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBDaGFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogQ2hlY2sgaWYgdGltZSBpcyB2YWxpZGF0ZSBvciB3aWxsIG1hdGNoIHRvIHZhbGlkYXRlIG9uZVxuICAgKi9cbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKG5leHREYXRlKSB7XG4gICAgdmFyIHZhbGlkYXRlRGF0ZSA9IGdldFZhbGlkVGltZShuZXh0RGF0ZSk7XG4gICAgb25TZWxlY3QodmFsaWRhdGVEYXRlKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENvbHVtbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENyZWF0ZSBhIHRlbXBsYXRlIGRhdGUgZm9yIHRoZSB0cmlnZ2VyIGNoYW5nZSBldmVudFxuICB2YXIgdHJpZ2dlckRhdGVUbXBsID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRtcGwgPSB2YWx1ZSB8fCBwaWNrZXJWYWx1ZSB8fCBnZW5lcmF0ZUNvbmZpZy5nZXROb3coKTtcbiAgICB2YXIgaXNOb3ROdWxsID0gZnVuY3Rpb24gaXNOb3ROdWxsKG51bSkge1xuICAgICAgcmV0dXJuIG51bSAhPT0gbnVsbCAmJiBudW0gIT09IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGlmIChpc05vdE51bGwoaG91cikpIHtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRIb3VyKHRtcGwsIGhvdXIpO1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldE1pbnV0ZSh0bXBsLCBtaW51dGUpO1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldFNlY29uZCh0bXBsLCBzZWNvbmQpO1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldE1pbGxpc2Vjb25kKHRtcGwsIG1pbGxpc2Vjb25kKTtcbiAgICB9IGVsc2UgaWYgKGlzTm90TnVsbChwaWNrZXJIb3VyKSkge1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldEhvdXIodG1wbCwgcGlja2VySG91cik7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0TWludXRlKHRtcGwsIHBpY2tlck1pbnV0ZSk7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0U2Vjb25kKHRtcGwsIHBpY2tlclNlY29uZCk7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0TWlsbGlzZWNvbmQodG1wbCwgcGlja2VyTWlsbGlzZWNvbmQpO1xuICAgIH0gZWxzZSBpZiAoaXNOb3ROdWxsKHZhbGlkSG91cikpIHtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRIb3VyKHRtcGwsIHZhbGlkSG91cik7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0TWludXRlKHRtcGwsIHZhbGlkTWludXRlKTtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRTZWNvbmQodG1wbCwgdmFsaWRTZWNvbmQpO1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldE1pbGxpc2Vjb25kKHRtcGwsIHZhbGlkTWlsbGlzZWNvbmQpO1xuICAgIH1cbiAgICByZXR1cm4gdG1wbDtcbiAgfSwgW3ZhbHVlLCBwaWNrZXJWYWx1ZSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCB2YWxpZEhvdXIsIHZhbGlkTWludXRlLCB2YWxpZFNlY29uZCwgdmFsaWRNaWxsaXNlY29uZCwgcGlja2VySG91ciwgcGlja2VyTWludXRlLCBwaWNrZXJTZWNvbmQsIHBpY2tlck1pbGxpc2Vjb25kLCBnZW5lcmF0ZUNvbmZpZ10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PSBDb2x1bW5zIENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGZpbGxDb2x1bW5WYWx1ZSA9IGZ1bmN0aW9uIGZpbGxDb2x1bW5WYWx1ZSh2YWwsIGZ1bmMpIHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnW2Z1bmNdKHRyaWdnZXJEYXRlVG1wbCwgdmFsKTtcbiAgfTtcbiAgdmFyIGdldE5leHRIb3VyVGltZSA9IGZ1bmN0aW9uIGdldE5leHRIb3VyVGltZSh2YWwpIHtcbiAgICByZXR1cm4gZmlsbENvbHVtblZhbHVlKHZhbCwgJ3NldEhvdXInKTtcbiAgfTtcbiAgdmFyIGdldE5leHRNaW51dGVUaW1lID0gZnVuY3Rpb24gZ2V0TmV4dE1pbnV0ZVRpbWUodmFsKSB7XG4gICAgcmV0dXJuIGZpbGxDb2x1bW5WYWx1ZSh2YWwsICdzZXRNaW51dGUnKTtcbiAgfTtcbiAgdmFyIGdldE5leHRTZWNvbmRUaW1lID0gZnVuY3Rpb24gZ2V0TmV4dFNlY29uZFRpbWUodmFsKSB7XG4gICAgcmV0dXJuIGZpbGxDb2x1bW5WYWx1ZSh2YWwsICdzZXRTZWNvbmQnKTtcbiAgfTtcbiAgdmFyIGdldE5leHRNaWxsaXNlY29uZFRpbWUgPSBmdW5jdGlvbiBnZXROZXh0TWlsbGlzZWNvbmRUaW1lKHZhbCkge1xuICAgIHJldHVybiBmaWxsQ29sdW1uVmFsdWUodmFsLCAnc2V0TWlsbGlzZWNvbmQnKTtcbiAgfTtcbiAgdmFyIGdldE1lcmlkaWVtVGltZSA9IGZ1bmN0aW9uIGdldE1lcmlkaWVtVGltZSh2YWwpIHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gJ2FtJyAmJiAhaXNBTShob3VyKSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldEhvdXIodHJpZ2dlckRhdGVUbXBsLCBob3VyIC0gMTIpO1xuICAgIH0gZWxzZSBpZiAodmFsID09PSAncG0nICYmIGlzQU0oaG91cikpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5zZXRIb3VyKHRyaWdnZXJEYXRlVG1wbCwgaG91ciArIDEyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyaWdnZXJEYXRlVG1wbDtcbiAgfTtcbiAgdmFyIG9uSG91ckNoYW5nZSA9IGZ1bmN0aW9uIG9uSG91ckNoYW5nZSh2YWwpIHtcbiAgICB0cmlnZ2VyQ2hhbmdlKGdldE5leHRIb3VyVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uTWludXRlQ2hhbmdlID0gZnVuY3Rpb24gb25NaW51dGVDaGFuZ2UodmFsKSB7XG4gICAgdHJpZ2dlckNoYW5nZShnZXROZXh0TWludXRlVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uU2Vjb25kQ2hhbmdlID0gZnVuY3Rpb24gb25TZWNvbmRDaGFuZ2UodmFsKSB7XG4gICAgdHJpZ2dlckNoYW5nZShnZXROZXh0U2Vjb25kVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uTWlsbGlzZWNvbmRDaGFuZ2UgPSBmdW5jdGlvbiBvbk1pbGxpc2Vjb25kQ2hhbmdlKHZhbCkge1xuICAgIHRyaWdnZXJDaGFuZ2UoZ2V0TmV4dE1pbGxpc2Vjb25kVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uTWVyaWRpZW1DaGFuZ2UgPSBmdW5jdGlvbiBvbk1lcmlkaWVtQ2hhbmdlKHZhbCkge1xuICAgIHRyaWdnZXJDaGFuZ2UoZ2V0TWVyaWRpZW1UaW1lKHZhbCkpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT0gQ29sdW1uIEhvdmVyID09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG9uSG91ckhvdmVyID0gZnVuY3Rpb24gb25Ib3VySG92ZXIodmFsKSB7XG4gICAgb25Ib3ZlcihnZXROZXh0SG91clRpbWUodmFsKSk7XG4gIH07XG4gIHZhciBvbk1pbnV0ZUhvdmVyID0gZnVuY3Rpb24gb25NaW51dGVIb3Zlcih2YWwpIHtcbiAgICBvbkhvdmVyKGdldE5leHRNaW51dGVUaW1lKHZhbCkpO1xuICB9O1xuICB2YXIgb25TZWNvbmRIb3ZlciA9IGZ1bmN0aW9uIG9uU2Vjb25kSG92ZXIodmFsKSB7XG4gICAgb25Ib3ZlcihnZXROZXh0U2Vjb25kVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uTWlsbGlzZWNvbmRIb3ZlciA9IGZ1bmN0aW9uIG9uTWlsbGlzZWNvbmRIb3Zlcih2YWwpIHtcbiAgICBvbkhvdmVyKGdldE5leHRNaWxsaXNlY29uZFRpbWUodmFsKSk7XG4gIH07XG4gIHZhciBvbk1lcmlkaWVtSG92ZXIgPSBmdW5jdGlvbiBvbk1lcmlkaWVtSG92ZXIodmFsKSB7XG4gICAgb25Ib3ZlcihnZXRNZXJpZGllbVRpbWUodmFsKSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc2hhcmVkQ29sdW1uUHJvcHMgPSB7XG4gICAgb25EYmxDbGljazogb25DZWxsRGJsQ2xpY2ssXG4gICAgY2hhbmdlT25TY3JvbGw6IGNoYW5nZU9uU2Nyb2xsXG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWNvbnRlbnRcIilcbiAgfSwgc2hvd0hvdXIgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGltZUNvbHVtbiwgX2V4dGVuZHMoe1xuICAgIHVuaXRzOiBob3VyVW5pdHMsXG4gICAgdmFsdWU6IGhvdXIsXG4gICAgb3B0aW9uYWxWYWx1ZTogcGlja2VySG91cixcbiAgICB0eXBlOiBcImhvdXJcIixcbiAgICBvbkNoYW5nZTogb25Ib3VyQ2hhbmdlLFxuICAgIG9uSG92ZXI6IG9uSG91ckhvdmVyXG4gIH0sIHNoYXJlZENvbHVtblByb3BzKSksIHNob3dNaW51dGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGltZUNvbHVtbiwgX2V4dGVuZHMoe1xuICAgIHVuaXRzOiBtaW51dGVVbml0cyxcbiAgICB2YWx1ZTogbWludXRlLFxuICAgIG9wdGlvbmFsVmFsdWU6IHBpY2tlck1pbnV0ZSxcbiAgICB0eXBlOiBcIm1pbnV0ZVwiLFxuICAgIG9uQ2hhbmdlOiBvbk1pbnV0ZUNoYW5nZSxcbiAgICBvbkhvdmVyOiBvbk1pbnV0ZUhvdmVyXG4gIH0sIHNoYXJlZENvbHVtblByb3BzKSksIHNob3dTZWNvbmQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGltZUNvbHVtbiwgX2V4dGVuZHMoe1xuICAgIHVuaXRzOiBzZWNvbmRVbml0cyxcbiAgICB2YWx1ZTogc2Vjb25kLFxuICAgIG9wdGlvbmFsVmFsdWU6IHBpY2tlclNlY29uZCxcbiAgICB0eXBlOiBcInNlY29uZFwiLFxuICAgIG9uQ2hhbmdlOiBvblNlY29uZENoYW5nZSxcbiAgICBvbkhvdmVyOiBvblNlY29uZEhvdmVyXG4gIH0sIHNoYXJlZENvbHVtblByb3BzKSksIHNob3dNaWxsaXNlY29uZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lQ29sdW1uLCBfZXh0ZW5kcyh7XG4gICAgdW5pdHM6IG1pbGxpc2Vjb25kVW5pdHMsXG4gICAgdmFsdWU6IG1pbGxpc2Vjb25kLFxuICAgIG9wdGlvbmFsVmFsdWU6IHBpY2tlck1pbGxpc2Vjb25kLFxuICAgIHR5cGU6IFwibWlsbGlzZWNvbmRcIixcbiAgICBvbkNoYW5nZTogb25NaWxsaXNlY29uZENoYW5nZSxcbiAgICBvbkhvdmVyOiBvbk1pbGxpc2Vjb25kSG92ZXJcbiAgfSwgc2hhcmVkQ29sdW1uUHJvcHMpKSwgc2hvd01lcmlkaWVtICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRpbWVDb2x1bW4sIF9leHRlbmRzKHtcbiAgICB1bml0czogbWVyaWRpZW1Vbml0cyxcbiAgICB2YWx1ZTogbWVyaWRpZW0sXG4gICAgdHlwZTogXCJtZXJpZGllbVwiLFxuICAgIG9uQ2hhbmdlOiBvbk1lcmlkaWVtQ2hhbmdlLFxuICAgIG9uSG92ZXI6IG9uTWVyaWRpZW1Ib3ZlclxuICB9LCBzaGFyZWRDb2x1bW5Qcm9wcykpKTtcbn0iLCJpbXBvcnQgeyB1c2VFdmVudCB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCBpc1Zpc2libGUgZnJvbSBcInJjLXV0aWwvZXMvRG9tL2lzVmlzaWJsZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFNQRUVEX1BURyA9IDEgLyAzO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU2Nyb2xsVG8odWxSZWYsIHZhbHVlKSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gU2Nyb2xsID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHNjcm9sbGluZ1JlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIHZhciBzY3JvbGxSYWZSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBzY3JvbGxEaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB2YXIgaXNTY3JvbGxpbmcgPSBmdW5jdGlvbiBpc1Njcm9sbGluZygpIHtcbiAgICByZXR1cm4gc2Nyb2xsaW5nUmVmLmN1cnJlbnQ7XG4gIH07XG4gIHZhciBzdG9wU2Nyb2xsID0gZnVuY3Rpb24gc3RvcFNjcm9sbCgpIHtcbiAgICByYWYuY2FuY2VsKHNjcm9sbFJhZlJlZi5jdXJyZW50KTtcbiAgICBzY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICB9O1xuICB2YXIgc2Nyb2xsUmFmVGltZXNSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIHN0YXJ0U2Nyb2xsID0gZnVuY3Rpb24gc3RhcnRTY3JvbGwoKSB7XG4gICAgdmFyIHVsID0gdWxSZWYuY3VycmVudDtcbiAgICBzY3JvbGxEaXN0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNjcm9sbFJhZlRpbWVzUmVmLmN1cnJlbnQgPSAwO1xuICAgIGlmICh1bCkge1xuICAgICAgdmFyIHRhcmdldExpID0gdWwucXVlcnlTZWxlY3RvcihcIltkYXRhLXZhbHVlPVxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIl1cIikpO1xuICAgICAgdmFyIGZpcnN0TGkgPSB1bC5xdWVyeVNlbGVjdG9yKFwibGlcIik7XG4gICAgICB2YXIgZG9TY3JvbGwgPSBmdW5jdGlvbiBkb1Njcm9sbCgpIHtcbiAgICAgICAgc3RvcFNjcm9sbCgpO1xuICAgICAgICBzY3JvbGxpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHNjcm9sbFJhZlRpbWVzUmVmLmN1cnJlbnQgKz0gMTtcbiAgICAgICAgdmFyIGN1cnJlbnRUb3AgPSB1bC5zY3JvbGxUb3A7XG4gICAgICAgIHZhciBmaXJzdExpVG9wID0gZmlyc3RMaS5vZmZzZXRUb3A7XG4gICAgICAgIHZhciB0YXJnZXRMaVRvcCA9IHRhcmdldExpLm9mZnNldFRvcDtcbiAgICAgICAgdmFyIHRhcmdldFRvcCA9IHRhcmdldExpVG9wIC0gZmlyc3RMaVRvcDtcblxuICAgICAgICAvLyBXYWl0IGZvciBlbGVtZW50IGV4aXN0LiA1IGZyYW1lcyBpcyBlbm91Z2hcbiAgICAgICAgaWYgKHRhcmdldExpVG9wID09PSAwICYmIHRhcmdldExpICE9PSBmaXJzdExpIHx8ICFpc1Zpc2libGUodWwpKSB7XG4gICAgICAgICAgaWYgKHNjcm9sbFJhZlRpbWVzUmVmLmN1cnJlbnQgPD0gNSkge1xuICAgICAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByYWYoZG9TY3JvbGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5leHRUb3AgPSBjdXJyZW50VG9wICsgKHRhcmdldFRvcCAtIGN1cnJlbnRUb3ApICogU1BFRURfUFRHO1xuICAgICAgICB2YXIgZGlzdCA9IE1hdGguYWJzKHRhcmdldFRvcCAtIG5leHRUb3ApO1xuXG4gICAgICAgIC8vIEJyZWFrIGlmIGRpc3QgZ2V0IGxhcmdlciwgd2hpY2ggbWVhbnMgdXNlciBpcyBzY3JvbGxpbmdcbiAgICAgICAgaWYgKHNjcm9sbERpc3RSZWYuY3VycmVudCAhPT0gbnVsbCAmJiBzY3JvbGxEaXN0UmVmLmN1cnJlbnQgPCBkaXN0KSB7XG4gICAgICAgICAgc3RvcFNjcm9sbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzY3JvbGxEaXN0UmVmLmN1cnJlbnQgPSBkaXN0O1xuXG4gICAgICAgIC8vIFN0b3Agd2hlbiBkaXN0IGlzIGxlc3MgdGhhbiAxXG4gICAgICAgIGlmIChkaXN0IDw9IDEpIHtcbiAgICAgICAgICB1bC5zY3JvbGxUb3AgPSB0YXJnZXRUb3A7XG4gICAgICAgICAgc3RvcFNjcm9sbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElFIG5vdCBzdXBwb3J0IGBzY3JvbGxUb2BcbiAgICAgICAgdWwuc2Nyb2xsVG9wID0gbmV4dFRvcDtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByYWYoZG9TY3JvbGwpO1xuICAgICAgfTtcbiAgICAgIGlmICh0YXJnZXRMaSAmJiBmaXJzdExpKSB7XG4gICAgICAgIGRvU2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBUcmlnZ2VyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHN5bmNTY3JvbGwgPSB1c2VFdmVudChzdGFydFNjcm9sbCk7XG4gIHJldHVybiBbc3luY1Njcm9sbCwgc3RvcFNjcm9sbCwgaXNTY3JvbGxpbmddO1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5leHBvcnQgZnVuY3Rpb24gZmluZFZhbGlkYXRlVGltZShkYXRlLCBnZXRIb3VyVW5pdHMsIGdldE1pbnV0ZVVuaXRzLCBnZXRTZWNvbmRVbml0cywgZ2V0TWlsbGlzZWNvbmRVbml0cywgZ2VuZXJhdGVDb25maWcpIHtcbiAgdmFyIG5leHREYXRlID0gZGF0ZTtcbiAgZnVuY3Rpb24gYWxpZ25WYWxpZGF0ZShnZXRVbml0VmFsdWUsIHNldFVuaXRWYWx1ZSwgdW5pdHMpIHtcbiAgICB2YXIgbmV4dFZhbHVlID0gZ2VuZXJhdGVDb25maWdbZ2V0VW5pdFZhbHVlXShuZXh0RGF0ZSk7XG4gICAgdmFyIG5leHRVbml0ID0gdW5pdHMuZmluZChmdW5jdGlvbiAodW5pdCkge1xuICAgICAgcmV0dXJuIHVuaXQudmFsdWUgPT09IG5leHRWYWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoIW5leHRVbml0IHx8IG5leHRVbml0LmRpc2FibGVkKSB7XG4gICAgICAvLyBGaW5kIG1vc3QgY2xvc2VzdCB1bml0XG4gICAgICB2YXIgdmFsaWRhdGVVbml0cyA9IHVuaXRzLmZpbHRlcihmdW5jdGlvbiAodW5pdCkge1xuICAgICAgICByZXR1cm4gIXVuaXQuZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciByZXZlcnNlRW5hYmxlZFVuaXRzID0gX3RvQ29uc3VtYWJsZUFycmF5KHZhbGlkYXRlVW5pdHMpLnJldmVyc2UoKTtcbiAgICAgIHZhciB2YWxpZGF0ZVVuaXQgPSByZXZlcnNlRW5hYmxlZFVuaXRzLmZpbmQoZnVuY3Rpb24gKHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIHVuaXQudmFsdWUgPD0gbmV4dFZhbHVlO1xuICAgICAgfSkgfHwgdmFsaWRhdGVVbml0c1swXTtcbiAgICAgIGlmICh2YWxpZGF0ZVVuaXQpIHtcbiAgICAgICAgbmV4dFZhbHVlID0gdmFsaWRhdGVVbml0LnZhbHVlO1xuICAgICAgICBuZXh0RGF0ZSA9IGdlbmVyYXRlQ29uZmlnW3NldFVuaXRWYWx1ZV0obmV4dERhdGUsIG5leHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0VmFsdWU7XG4gIH1cblxuICAvLyBGaW5kIHZhbGlkYXRlIGhvdXJcbiAgdmFyIG5leHRIb3VyID0gYWxpZ25WYWxpZGF0ZSgnZ2V0SG91cicsICdzZXRIb3VyJywgZ2V0SG91clVuaXRzKCkpO1xuXG4gIC8vIEZpbmQgdmFsaWRhdGUgbWludXRlXG4gIHZhciBuZXh0TWludXRlID0gYWxpZ25WYWxpZGF0ZSgnZ2V0TWludXRlJywgJ3NldE1pbnV0ZScsIGdldE1pbnV0ZVVuaXRzKG5leHRIb3VyKSk7XG5cbiAgLy8gRmluZCB2YWxpZGF0ZSBzZWNvbmRcbiAgdmFyIG5leHRTZWNvbmQgPSBhbGlnblZhbGlkYXRlKCdnZXRTZWNvbmQnLCAnc2V0U2Vjb25kJywgZ2V0U2Vjb25kVW5pdHMobmV4dEhvdXIsIG5leHRNaW51dGUpKTtcblxuICAvLyBGaW5kIHZhbGlkYXRlIG1pbGxpc2Vjb25kXG4gIGFsaWduVmFsaWRhdGUoJ2dldE1pbGxpc2Vjb25kJywgJ3NldE1pbGxpc2Vjb25kJywgZ2V0TWlsbGlzZWNvbmRVbml0cyhuZXh0SG91ciwgbmV4dE1pbnV0ZSwgbmV4dFNlY29uZCkpO1xuICByZXR1cm4gbmV4dERhdGU7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcm1hdFZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGVVdGlsXCI7XG5pbXBvcnQgeyBQYW5lbENvbnRleHQsIHVzZUluZm8gfSBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IFBhbmVsSGVhZGVyIGZyb20gXCIuLi9QYW5lbEhlYWRlclwiO1xuaW1wb3J0IFRpbWVQYW5lbEJvZHkgZnJvbSBcIi4vVGltZVBhbmVsQm9keVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGltZVBhbmVsKHByb3BzKSB7XG4gIHZhciBwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICBsb2NhbGUgPSBwcm9wcy5sb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWcgPSBwcm9wcy5nZW5lcmF0ZUNvbmZpZyxcbiAgICBzaG93VGltZSA9IHByb3BzLnNob3dUaW1lO1xuICB2YXIgX3JlZiA9IHNob3dUaW1lIHx8IHt9LFxuICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0O1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXRpbWUtcGFuZWxcIik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQmFzZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUluZm8gPSB1c2VJbmZvKHByb3BzLCAndGltZScpLFxuICAgIF91c2VJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbmZvLCAxKSxcbiAgICBpbmZvID0gX3VzZUluZm8yWzBdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBpbmZvXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocGFuZWxQcmVmaXhDbHMpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsSGVhZGVyLCBudWxsLCB2YWx1ZSA/IGZvcm1hdFZhbHVlKHZhbHVlLCB7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gIH0pIDogXCJcXHhBMFwiKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGltZVBhbmVsQm9keSwgc2hvd1RpbWUpKSk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzSW5SYW5nZSwgaXNTYW1lV2VlayB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IERhdGVQYW5lbCBmcm9tIFwiLi4vRGF0ZVBhbmVsXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXZWVrUGFuZWwocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGhvdmVyVmFsdWUgPSBwcm9wcy5ob3ZlclZhbHVlLFxuICAgIGhvdmVyUmFuZ2VWYWx1ZSA9IHByb3BzLmhvdmVyUmFuZ2VWYWx1ZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJvdyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbG9jYWxlTmFtZSA9IGxvY2FsZS5sb2NhbGU7XG4gIHZhciByb3dQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXdlZWstcGFuZWwtcm93XCIpO1xuICB2YXIgcm93Q2xhc3NOYW1lID0gZnVuY3Rpb24gcm93Q2xhc3NOYW1lKGN1cnJlbnREYXRlKSB7XG4gICAgdmFyIHJhbmdlQ2xzID0ge307XG4gICAgaWYgKGhvdmVyUmFuZ2VWYWx1ZSkge1xuICAgICAgdmFyIF9ob3ZlclJhbmdlVmFsdWUgPSBfc2xpY2VkVG9BcnJheShob3ZlclJhbmdlVmFsdWUsIDIpLFxuICAgICAgICByYW5nZVN0YXJ0ID0gX2hvdmVyUmFuZ2VWYWx1ZVswXSxcbiAgICAgICAgcmFuZ2VFbmQgPSBfaG92ZXJSYW5nZVZhbHVlWzFdO1xuICAgICAgdmFyIGlzUmFuZ2VTdGFydCA9IGlzU2FtZVdlZWsoZ2VuZXJhdGVDb25maWcsIGxvY2FsZU5hbWUsIHJhbmdlU3RhcnQsIGN1cnJlbnREYXRlKTtcbiAgICAgIHZhciBpc1JhbmdlRW5kID0gaXNTYW1lV2VlayhnZW5lcmF0ZUNvbmZpZywgbG9jYWxlTmFtZSwgcmFuZ2VFbmQsIGN1cnJlbnREYXRlKTtcbiAgICAgIHJhbmdlQ2xzW1wiXCIuY29uY2F0KHJvd1ByZWZpeENscywgXCItcmFuZ2Utc3RhcnRcIildID0gaXNSYW5nZVN0YXJ0O1xuICAgICAgcmFuZ2VDbHNbXCJcIi5jb25jYXQocm93UHJlZml4Q2xzLCBcIi1yYW5nZS1lbmRcIildID0gaXNSYW5nZUVuZDtcbiAgICAgIHJhbmdlQ2xzW1wiXCIuY29uY2F0KHJvd1ByZWZpeENscywgXCItcmFuZ2UtaG92ZXJcIildID0gIWlzUmFuZ2VTdGFydCAmJiAhaXNSYW5nZUVuZCAmJiBpc0luUmFuZ2UoZ2VuZXJhdGVDb25maWcsIHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBjdXJyZW50RGF0ZSk7XG4gICAgfVxuICAgIGlmIChob3ZlclZhbHVlKSB7XG4gICAgICByYW5nZUNsc1tcIlwiLmNvbmNhdChyb3dQcmVmaXhDbHMsIFwiLWhvdmVyXCIpXSA9IGhvdmVyVmFsdWUuc29tZShmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gaXNTYW1lV2VlayhnZW5lcmF0ZUNvbmZpZywgbG9jYWxlTmFtZSwgY3VycmVudERhdGUsIGRhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWVzKHJvd1ByZWZpeENscywgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChyb3dQcmVmaXhDbHMsIFwiLXNlbGVjdGVkXCIpLCAhaG92ZXJSYW5nZVZhbHVlICYmIGlzU2FtZVdlZWsoZ2VuZXJhdGVDb25maWcsIGxvY2FsZU5hbWUsIHZhbHVlLCBjdXJyZW50RGF0ZSkpLFxuICAgIC8vIFBhdGNoIGZvciBob3ZlciByYW5nZVxuICAgIHJhbmdlQ2xzKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBhbmVsLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBtb2RlOiBcIndlZWtcIixcbiAgICBwYW5lbE5hbWU6IFwid2Vla1wiLFxuICAgIHJvd0NsYXNzTmFtZTogcm93Q2xhc3NOYW1lXG4gIH0pKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcm1hdFZhbHVlLCBpc0luUmFuZ2UsIGlzU2FtZVllYXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgdXNlSW5mbyB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgUGFuZWxCb2R5IGZyb20gXCIuLi9QYW5lbEJvZHlcIjtcbmltcG9ydCBQYW5lbEhlYWRlciBmcm9tIFwiLi4vUGFuZWxIZWFkZXJcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFllYXJQYW5lbChwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIHBpY2tlclZhbHVlID0gcHJvcHMucGlja2VyVmFsdWUsXG4gICAgZGlzYWJsZWREYXRlID0gcHJvcHMuZGlzYWJsZWREYXRlLFxuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UgPSBwcm9wcy5vblBpY2tlclZhbHVlQ2hhbmdlLFxuICAgIG9uTW9kZUNoYW5nZSA9IHByb3BzLm9uTW9kZUNoYW5nZTtcbiAgdmFyIHBhbmVsUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi15ZWFyLXBhbmVsXCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IEJhc2UgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VJbmZvID0gdXNlSW5mbyhwcm9wcywgJ3llYXInKSxcbiAgICBfdXNlSW5mbzIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5mbywgMSksXG4gICAgaW5mbyA9IF91c2VJbmZvMlswXTtcbiAgdmFyIGdldFN0YXJ0WWVhciA9IGZ1bmN0aW9uIGdldFN0YXJ0WWVhcihkYXRlKSB7XG4gICAgdmFyIHN0YXJ0WWVhciA9IE1hdGguZmxvb3IoZ2VuZXJhdGVDb25maWcuZ2V0WWVhcihkYXRlKSAvIDEwKSAqIDEwO1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5zZXRZZWFyKGRhdGUsIHN0YXJ0WWVhcik7XG4gIH07XG4gIHZhciBnZXRFbmRZZWFyID0gZnVuY3Rpb24gZ2V0RW5kWWVhcihkYXRlKSB7XG4gICAgdmFyIHN0YXJ0WWVhciA9IGdldFN0YXJ0WWVhcihkYXRlKTtcbiAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuYWRkWWVhcihzdGFydFllYXIsIDkpO1xuICB9O1xuICB2YXIgc3RhcnRZZWFyRGF0ZSA9IGdldFN0YXJ0WWVhcihwaWNrZXJWYWx1ZSk7XG4gIHZhciBlbmRZZWFyRGF0ZSA9IGdldEVuZFllYXIocGlja2VyVmFsdWUpO1xuICB2YXIgYmFzZURhdGUgPSBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKHN0YXJ0WWVhckRhdGUsIC0xKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENlbGxzID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBnZXRDZWxsRGF0ZSA9IGZ1bmN0aW9uIGdldENlbGxEYXRlKGRhdGUsIG9mZnNldCkge1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKGRhdGUsIG9mZnNldCk7XG4gIH07XG4gIHZhciBnZXRDZWxsVGV4dCA9IGZ1bmN0aW9uIGdldENlbGxUZXh0KGRhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VmFsdWUoZGF0ZSwge1xuICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICBmb3JtYXQ6IGxvY2FsZS5jZWxsWWVhckZvcm1hdCxcbiAgICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICAgIH0pO1xuICB9O1xuICB2YXIgZ2V0Q2VsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldENlbGxDbGFzc05hbWUoZGF0ZSkge1xuICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY2VsbC1pbi12aWV3XCIpLCBpc1NhbWVZZWFyKGdlbmVyYXRlQ29uZmlnLCBkYXRlLCBzdGFydFllYXJEYXRlKSB8fCBpc1NhbWVZZWFyKGdlbmVyYXRlQ29uZmlnLCBkYXRlLCBlbmRZZWFyRGF0ZSkgfHwgaXNJblJhbmdlKGdlbmVyYXRlQ29uZmlnLCBzdGFydFllYXJEYXRlLCBlbmRZZWFyRGF0ZSwgZGF0ZSkpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBEaXNhYmxlZCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZERpc2FibGVkRGF0ZSA9IGRpc2FibGVkRGF0ZSA/IGZ1bmN0aW9uIChjdXJyZW50RGF0ZSwgZGlzYWJsZWRJbmZvKSB7XG4gICAgLy8gU3RhcnRcbiAgICB2YXIgc3RhcnRNb250aCA9IGdlbmVyYXRlQ29uZmlnLnNldE1vbnRoKGN1cnJlbnREYXRlLCAwKTtcbiAgICB2YXIgc3RhcnREYXRlID0gZ2VuZXJhdGVDb25maWcuc2V0RGF0ZShzdGFydE1vbnRoLCAxKTtcblxuICAgIC8vIEVuZFxuICAgIHZhciBlbmRNb250aCA9IGdlbmVyYXRlQ29uZmlnLmFkZFllYXIoc3RhcnREYXRlLCAxKTtcbiAgICB2YXIgZW5kRGF0ZSA9IGdlbmVyYXRlQ29uZmlnLmFkZERhdGUoZW5kTW9udGgsIC0xKTtcbiAgICByZXR1cm4gZGlzYWJsZWREYXRlKHN0YXJ0RGF0ZSwgZGlzYWJsZWRJbmZvKSAmJiBkaXNhYmxlZERhdGUoZW5kRGF0ZSwgZGlzYWJsZWRJbmZvKTtcbiAgfSA6IG51bGw7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBIZWFkZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgeWVhck5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBrZXk6IFwiZGVjYWRlXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxvY2FsZS5kZWNhZGVTZWxlY3QsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgIG9uTW9kZUNoYW5nZSgnZGVjYWRlJyk7XG4gICAgfSxcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRlY2FkZS1idG5cIilcbiAgfSwgZm9ybWF0VmFsdWUoc3RhcnRZZWFyRGF0ZSwge1xuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIGZvcm1hdDogbG9jYWxlLnllYXJGb3JtYXQsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gIH0pLCBcIi1cIiwgZm9ybWF0VmFsdWUoZW5kWWVhckRhdGUsIHtcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBmb3JtYXQ6IGxvY2FsZS55ZWFyRm9ybWF0LFxuICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGluZm9cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogcGFuZWxQcmVmaXhDbHNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxIZWFkZXIsIHtcbiAgICBzdXBlck9mZnNldDogZnVuY3Rpb24gc3VwZXJPZmZzZXQoZGlzdGFuY2UpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKHBpY2tlclZhbHVlLCBkaXN0YW5jZSAqIDEwKTtcbiAgICB9LFxuICAgIG9uQ2hhbmdlOiBvblBpY2tlclZhbHVlQ2hhbmdlXG4gICAgLy8gTGltaXRhdGlvblxuICAgICxcbiAgICBnZXRTdGFydDogZ2V0U3RhcnRZZWFyLFxuICAgIGdldEVuZDogZ2V0RW5kWWVhclxuICB9LCB5ZWFyTm9kZSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQm9keSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWREYXRlOiBtZXJnZWREaXNhYmxlZERhdGUsXG4gICAgdGl0bGVGb3JtYXQ6IGxvY2FsZS5maWVsZFllYXJGb3JtYXQsXG4gICAgY29sTnVtOiAzLFxuICAgIHJvd051bTogNCxcbiAgICBiYXNlRGF0ZTogYmFzZURhdGVcbiAgICAvLyBCb2R5XG4gICAgLFxuICAgIGdldENlbGxEYXRlOiBnZXRDZWxsRGF0ZSxcbiAgICBnZXRDZWxsVGV4dDogZ2V0Q2VsbFRleHQsXG4gICAgZ2V0Q2VsbENsYXNzTmFtZTogZ2V0Q2VsbENsYXNzTmFtZVxuICB9KSkpKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKiogVXNlZCBmb3IgZWFjaCBzaW5nbGUgUGFuZWwuIGUuZy4gRGF0ZVBhbmVsICovXG5leHBvcnQgdmFyIFBhbmVsQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBhbmVsQ29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUGFuZWxDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBHZXQgc2hhcmVkIHByb3BzIGZvciB0aGUgU2hhcmVkUGFuZWxQcm9wcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbmZvKHByb3BzLCBwYW5lbFR5cGUpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBkaXNhYmxlZERhdGUgPSBwcm9wcy5kaXNhYmxlZERhdGUsXG4gICAgbWluRGF0ZSA9IHByb3BzLm1pbkRhdGUsXG4gICAgbWF4RGF0ZSA9IHByb3BzLm1heERhdGUsXG4gICAgY2VsbFJlbmRlciA9IHByb3BzLmNlbGxSZW5kZXIsXG4gICAgaG92ZXJWYWx1ZSA9IHByb3BzLmhvdmVyVmFsdWUsXG4gICAgaG92ZXJSYW5nZVZhbHVlID0gcHJvcHMuaG92ZXJSYW5nZVZhbHVlLFxuICAgIG9uSG92ZXIgPSBwcm9wcy5vbkhvdmVyLFxuICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcbiAgICBwaWNrZXJWYWx1ZSA9IHByb3BzLnBpY2tlclZhbHVlLFxuICAgIG9uU2VsZWN0ID0gcHJvcHMub25TZWxlY3QsXG4gICAgcHJldkljb24gPSBwcm9wcy5wcmV2SWNvbixcbiAgICBuZXh0SWNvbiA9IHByb3BzLm5leHRJY29uLFxuICAgIHN1cGVyUHJldkljb24gPSBwcm9wcy5zdXBlclByZXZJY29uLFxuICAgIHN1cGVyTmV4dEljb24gPSBwcm9wcy5zdXBlck5leHRJY29uO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gTUlTQyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBub3cgPSBnZW5lcmF0ZUNvbmZpZy5nZXROb3coKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEluZm8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaW5mbyA9IHtcbiAgICBub3c6IG5vdyxcbiAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICBwaWNrZXJWYWx1ZTogcGlja2VyVmFsdWUsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgZGlzYWJsZWREYXRlOiBkaXNhYmxlZERhdGUsXG4gICAgbWluRGF0ZTogbWluRGF0ZSxcbiAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgIGNlbGxSZW5kZXI6IGNlbGxSZW5kZXIsXG4gICAgaG92ZXJWYWx1ZTogaG92ZXJWYWx1ZSxcbiAgICBob3ZlclJhbmdlVmFsdWU6IGhvdmVyUmFuZ2VWYWx1ZSxcbiAgICBvbkhvdmVyOiBvbkhvdmVyLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZyxcbiAgICBvblNlbGVjdDogb25TZWxlY3QsXG4gICAgcGFuZWxUeXBlOiBwYW5lbFR5cGUsXG4gICAgLy8gSWNvbnNcbiAgICBwcmV2SWNvbjogcHJldkljb24sXG4gICAgbmV4dEljb246IG5leHRJY29uLFxuICAgIHN1cGVyUHJldkljb246IHN1cGVyUHJldkljb24sXG4gICAgc3VwZXJOZXh0SWNvbjogc3VwZXJOZXh0SWNvblxuICB9O1xuICByZXR1cm4gW2luZm8sIG5vd107XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJbnRlcm5hbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbnRlcm5hbCB1c2FnZSBmb3IgUmFuZ2VQaWNrZXIgdG8gbm90IHRvIHNob3cgdGhlIG9wZXJhdGlvbiBhcnJvd1xuICovXG5leHBvcnQgdmFyIFBpY2tlckhhY2tDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUGlja2VySGFja0NvbnRleHQuZGlzcGxheU5hbWUgPSAnUGlja2VySGFja0NvbnRleHQnO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV2ZW50LCB1c2VNZXJnZWRTdGF0ZSwgd2FybmluZyB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUxvY2FsZSBmcm9tIFwiLi4vaG9va3MvdXNlTG9jYWxlXCI7XG5pbXBvcnQgeyBmaWxsU2hvd1RpbWVDb25maWcsIGdldFRpbWVQcm9wcyB9IGZyb20gXCIuLi9ob29rcy91c2VUaW1lQ29uZmlnXCI7XG5pbXBvcnQgdXNlVG9nZ2xlRGF0ZXMgZnJvbSBcIi4uL2hvb2tzL3VzZVRvZ2dsZURhdGVzXCI7XG5pbXBvcnQgUGlja2VyQ29udGV4dCBmcm9tIFwiLi4vUGlja2VySW5wdXQvY29udGV4dFwiO1xuaW1wb3J0IHVzZUNlbGxSZW5kZXIgZnJvbSBcIi4uL1BpY2tlcklucHV0L2hvb2tzL3VzZUNlbGxSZW5kZXJcIjtcbmltcG9ydCB7IGlzU2FtZSB9IGZyb20gXCIuLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IHsgcGlja1Byb3BzLCB0b0FycmF5IH0gZnJvbSBcIi4uL3V0aWxzL21pc2NVdGlsXCI7XG5pbXBvcnQgeyBQaWNrZXJIYWNrQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCBEYXRlUGFuZWwgZnJvbSBcIi4vRGF0ZVBhbmVsXCI7XG5pbXBvcnQgRGF0ZVRpbWVQYW5lbCBmcm9tIFwiLi9EYXRlVGltZVBhbmVsXCI7XG5pbXBvcnQgRGVjYWRlUGFuZWwgZnJvbSBcIi4vRGVjYWRlUGFuZWxcIjtcbmltcG9ydCBNb250aFBhbmVsIGZyb20gXCIuL01vbnRoUGFuZWxcIjtcbmltcG9ydCBRdWFydGVyUGFuZWwgZnJvbSBcIi4vUXVhcnRlclBhbmVsXCI7XG5pbXBvcnQgVGltZVBhbmVsIGZyb20gXCIuL1RpbWVQYW5lbFwiO1xuaW1wb3J0IFdlZWtQYW5lbCBmcm9tIFwiLi9XZWVrUGFuZWxcIjtcbmltcG9ydCBZZWFyUGFuZWwgZnJvbSBcIi4vWWVhclBhbmVsXCI7XG52YXIgRGVmYXVsdENvbXBvbmVudHMgPSB7XG4gIGRhdGU6IERhdGVQYW5lbCxcbiAgZGF0ZXRpbWU6IERhdGVUaW1lUGFuZWwsXG4gIHdlZWs6IFdlZWtQYW5lbCxcbiAgbW9udGg6IE1vbnRoUGFuZWwsXG4gIHF1YXJ0ZXI6IFF1YXJ0ZXJQYW5lbCxcbiAgeWVhcjogWWVhclBhbmVsLFxuICBkZWNhZGU6IERlY2FkZVBhbmVsLFxuICB0aW1lOiBUaW1lUGFuZWxcbn07XG5mdW5jdGlvbiBQaWNrZXJQYW5lbChwcm9wcywgcmVmKSB7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dDtcbiAgdmFyIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICBwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgX3Byb3BzJHRhYkluZGV4ID0gcHJvcHMudGFiSW5kZXgsXG4gICAgdGFiSW5kZXggPSBfcHJvcHMkdGFiSW5kZXggPT09IHZvaWQgMCA/IDAgOiBfcHJvcHMkdGFiSW5kZXgsXG4gICAgbXVsdGlwbGUgPSBwcm9wcy5tdWx0aXBsZSxcbiAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uU2VsZWN0ID0gcHJvcHMub25TZWxlY3QsXG4gICAgZGVmYXVsdFBpY2tlclZhbHVlID0gcHJvcHMuZGVmYXVsdFBpY2tlclZhbHVlLFxuICAgIHBpY2tlclZhbHVlID0gcHJvcHMucGlja2VyVmFsdWUsXG4gICAgb25QaWNrZXJWYWx1ZUNoYW5nZSA9IHByb3BzLm9uUGlja2VyVmFsdWVDaGFuZ2UsXG4gICAgbW9kZSA9IHByb3BzLm1vZGUsXG4gICAgb25QYW5lbENoYW5nZSA9IHByb3BzLm9uUGFuZWxDaGFuZ2UsXG4gICAgX3Byb3BzJHBpY2tlciA9IHByb3BzLnBpY2tlcixcbiAgICBwaWNrZXIgPSBfcHJvcHMkcGlja2VyID09PSB2b2lkIDAgPyAnZGF0ZScgOiBfcHJvcHMkcGlja2VyLFxuICAgIHNob3dUaW1lID0gcHJvcHMuc2hvd1RpbWUsXG4gICAgaG92ZXJWYWx1ZSA9IHByb3BzLmhvdmVyVmFsdWUsXG4gICAgaG92ZXJSYW5nZVZhbHVlID0gcHJvcHMuaG92ZXJSYW5nZVZhbHVlLFxuICAgIGNlbGxSZW5kZXIgPSBwcm9wcy5jZWxsUmVuZGVyLFxuICAgIGRhdGVSZW5kZXIgPSBwcm9wcy5kYXRlUmVuZGVyLFxuICAgIG1vbnRoQ2VsbFJlbmRlciA9IHByb3BzLm1vbnRoQ2VsbFJlbmRlcixcbiAgICBfcHJvcHMkY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgY29tcG9uZW50cyA9IF9wcm9wcyRjb21wb25lbnRzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRjb21wb25lbnRzLFxuICAgIGhpZGVIZWFkZXIgPSBwcm9wcy5oaWRlSGVhZGVyO1xuICB2YXIgbWVyZ2VkUHJlZml4Q2xzID0gKChfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VyQ29udGV4dCkpID09PSBudWxsIHx8IF9SZWFjdCR1c2VDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHMpIHx8IHByZWZpeENscyB8fCAncmMtcGlja2VyJztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWZzID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciByb290UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQ6IHJvb3RSZWYuY3VycmVudFxuICAgIH07XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFRpbWUgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQXV0byBgZm9ybWF0YCBuZWVkIHRvIGNoZWNrIGBzaG93VGltZS5zaG93WFhYYCBmaXJzdC5cbiAgLy8gQW5kIHRoZW4gbWVyZ2UgdGhlIGBsb2NhbGVgIGludG8gYG1lcmdlZFNob3dUaW1lYC5cbiAgdmFyIF9nZXRUaW1lUHJvcHMgPSBnZXRUaW1lUHJvcHMocHJvcHMpLFxuICAgIF9nZXRUaW1lUHJvcHMyID0gX3NsaWNlZFRvQXJyYXkoX2dldFRpbWVQcm9wcywgNCksXG4gICAgdGltZVByb3BzID0gX2dldFRpbWVQcm9wczJbMF0sXG4gICAgbG9jYWxlVGltZVByb3BzID0gX2dldFRpbWVQcm9wczJbMV0sXG4gICAgc2hvd1RpbWVGb3JtYXQgPSBfZ2V0VGltZVByb3BzMlsyXSxcbiAgICBwcm9wRm9ybWF0ID0gX2dldFRpbWVQcm9wczJbM107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBMb2NhbGUgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZmlsbGVkTG9jYWxlID0gdXNlTG9jYWxlKGxvY2FsZSwgbG9jYWxlVGltZVByb3BzKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFBpY2tlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBpbnRlcm5hbFBpY2tlciA9IHBpY2tlciA9PT0gJ2RhdGUnICYmIHNob3dUaW1lID8gJ2RhdGV0aW1lJyA6IHBpY2tlcjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gU2hvd1RpbWUgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBtZXJnZWRTaG93VGltZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmaWxsU2hvd1RpbWVDb25maWcoaW50ZXJuYWxQaWNrZXIsIHNob3dUaW1lRm9ybWF0LCBwcm9wRm9ybWF0LCB0aW1lUHJvcHMsIGZpbGxlZExvY2FsZSk7XG4gIH0sIFtpbnRlcm5hbFBpY2tlciwgc2hvd1RpbWVGb3JtYXQsIHByb3BGb3JtYXQsIHRpbWVQcm9wcywgZmlsbGVkTG9jYWxlXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gTm93ID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbm93ID0gZ2VuZXJhdGVDb25maWcuZ2V0Tm93KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gTW9kZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZU1lcmdlZFN0YXRlID0gdXNlTWVyZ2VkU3RhdGUocGlja2VyLCB7XG4gICAgICB2YWx1ZTogbW9kZSxcbiAgICAgIHBvc3RTdGF0ZTogZnVuY3Rpb24gcG9zdFN0YXRlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsIHx8ICdkYXRlJztcbiAgICAgIH1cbiAgICB9KSxcbiAgICBfdXNlTWVyZ2VkU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZU1lcmdlZFN0YXRlLCAyKSxcbiAgICBtZXJnZWRNb2RlID0gX3VzZU1lcmdlZFN0YXRlMlswXSxcbiAgICBzZXRNZXJnZWRNb2RlID0gX3VzZU1lcmdlZFN0YXRlMlsxXTtcbiAgdmFyIGludGVybmFsTW9kZSA9IG1lcmdlZE1vZGUgPT09ICdkYXRlJyAmJiBtZXJnZWRTaG93VGltZSA/ICdkYXRldGltZScgOiBtZXJnZWRNb2RlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gVG9nZ2xlID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHRvZ2dsZURhdGVzID0gdXNlVG9nZ2xlRGF0ZXMoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgaW50ZXJuYWxQaWNrZXIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPj4+IFJlYWwgdmFsdWVcbiAgLy8gSW50ZXJhY3RpdmUgd2l0aCBgb25DaGFuZ2VgIGV2ZW50IHdoaWNoIG9ubHkgdHJpZ2dlciB3aGVuIHRoZSBgbW9kZWAgaXMgYHBpY2tlcmBcbiAgdmFyIF91c2VNZXJnZWRTdGF0ZTMgPSB1c2VNZXJnZWRTdGF0ZShkZWZhdWx0VmFsdWUsIHtcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUzLCAyKSxcbiAgICBpbm5lclZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFswXSxcbiAgICBzZXRNZXJnZWRWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTRbMV07XG4gIHZhciBtZXJnZWRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIC8vIENsZWFuIHVwIGBbbnVsbF1gXG4gICAgdmFyIHZhbHVlcyA9IHRvQXJyYXkoaW5uZXJWYWx1ZSkuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSk7XG4gICAgcmV0dXJuIG11bHRpcGxlID8gdmFsdWVzIDogdmFsdWVzLnNsaWNlKDAsIDEpO1xuICB9LCBbaW5uZXJWYWx1ZSwgbXVsdGlwbGVdKTtcblxuICAvLyBTeW5jIHZhbHVlIGFuZCBvbmx5IHRyaWdnZXIgb25DaGFuZ2UgZXZlbnQgd2hlbiBjaGFuZ2VkXG4gIHZhciB0cmlnZ2VyQ2hhbmdlID0gdXNlRXZlbnQoZnVuY3Rpb24gKG5leHRWYWx1ZSkge1xuICAgIHNldE1lcmdlZFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgaWYgKG9uQ2hhbmdlICYmIChuZXh0VmFsdWUgPT09IG51bGwgfHwgbWVyZ2VkVmFsdWUubGVuZ3RoICE9PSBuZXh0VmFsdWUubGVuZ3RoIHx8IG1lcmdlZFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9yaSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAhaXNTYW1lKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIG9yaSwgbmV4dFZhbHVlW2luZGV4XSwgaW50ZXJuYWxQaWNrZXIpO1xuICAgIH0pKSkge1xuICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCB8fCBvbkNoYW5nZShtdWx0aXBsZSA/IG5leHRWYWx1ZSA6IG5leHRWYWx1ZVswXSk7XG4gICAgfVxuICB9KTtcblxuICAvLyA+Pj4gQ2FsZW5kYXJWYWx1ZVxuICAvLyBDYWxlbmRhclZhbHVlIGlzIGEgdGVtcCB2YWx1ZSBmb3IgdXNlciBvcGVyYXRpb25cbiAgLy8gd2hpY2ggd2lsbCBvbmx5IHRyaWdnZXIgYG9uQ2FsZW5kYXJDaGFuZ2VgIGJ1dCBub3QgYG9uQ2hhbmdlYFxuICB2YXIgb25JbnRlcm5hbFNlbGVjdCA9IHVzZUV2ZW50KGZ1bmN0aW9uIChuZXdEYXRlKSB7XG4gICAgb25TZWxlY3QgPT09IG51bGwgfHwgb25TZWxlY3QgPT09IHZvaWQgMCB8fCBvblNlbGVjdChuZXdEYXRlKTtcbiAgICBpZiAobWVyZ2VkTW9kZSA9PT0gcGlja2VyKSB7XG4gICAgICB2YXIgbmV4dFZhbHVlcyA9IG11bHRpcGxlID8gdG9nZ2xlRGF0ZXMobWVyZ2VkVmFsdWUsIG5ld0RhdGUpIDogW25ld0RhdGVdO1xuICAgICAgdHJpZ2dlckNoYW5nZShuZXh0VmFsdWVzKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vID4+PiBQaWNrZXJWYWx1ZVxuICAvLyBQaWNrZXJWYWx1ZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGN1cnJlbnQgZGlzcGxheWluZyBwYW5lbFxuICB2YXIgX3VzZU1lcmdlZFN0YXRlNSA9IHVzZU1lcmdlZFN0YXRlKGRlZmF1bHRQaWNrZXJWYWx1ZSB8fCBtZXJnZWRWYWx1ZVswXSB8fCBub3csIHtcbiAgICAgIHZhbHVlOiBwaWNrZXJWYWx1ZVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGU1LCAyKSxcbiAgICBtZXJnZWRQaWNrZXJWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTZbMF0sXG4gICAgc2V0SW50ZXJuYWxQaWNrZXJWYWx1ZSA9IF91c2VNZXJnZWRTdGF0ZTZbMV07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1lcmdlZFZhbHVlWzBdICYmICFwaWNrZXJWYWx1ZSkge1xuICAgICAgc2V0SW50ZXJuYWxQaWNrZXJWYWx1ZShtZXJnZWRWYWx1ZVswXSk7XG4gICAgfVxuICB9LCBbbWVyZ2VkVmFsdWVbMF1dKTtcblxuICAvLyBCb3RoIHRyaWdnZXIgd2hlbiBtYW51YWxseSBwaWNrZXJWYWx1ZSBvciBtb2RlIGNoYW5nZVxuICB2YXIgdHJpZ2dlclBhbmVsQ2hhbmdlID0gZnVuY3Rpb24gdHJpZ2dlclBhbmVsQ2hhbmdlKHZpZXdEYXRlLCBuZXh0TW9kZSkge1xuICAgIG9uUGFuZWxDaGFuZ2UgPT09IG51bGwgfHwgb25QYW5lbENoYW5nZSA9PT0gdm9pZCAwIHx8IG9uUGFuZWxDaGFuZ2Uodmlld0RhdGUgfHwgcGlja2VyVmFsdWUsIG5leHRNb2RlIHx8IG1lcmdlZE1vZGUpO1xuICB9O1xuICB2YXIgc2V0UGlja2VyVmFsdWUgPSBmdW5jdGlvbiBzZXRQaWNrZXJWYWx1ZShuZXh0UGlja2VyVmFsdWUpIHtcbiAgICB2YXIgdHJpZ2dlclBhbmVsRXZlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIHNldEludGVybmFsUGlja2VyVmFsdWUobmV4dFBpY2tlclZhbHVlKTtcbiAgICBvblBpY2tlclZhbHVlQ2hhbmdlID09PSBudWxsIHx8IG9uUGlja2VyVmFsdWVDaGFuZ2UgPT09IHZvaWQgMCB8fCBvblBpY2tlclZhbHVlQ2hhbmdlKG5leHRQaWNrZXJWYWx1ZSk7XG4gICAgaWYgKHRyaWdnZXJQYW5lbEV2ZW50KSB7XG4gICAgICB0cmlnZ2VyUGFuZWxDaGFuZ2UobmV4dFBpY2tlclZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHZhciB0cmlnZ2VyTW9kZUNoYW5nZSA9IGZ1bmN0aW9uIHRyaWdnZXJNb2RlQ2hhbmdlKG5leHRNb2RlLCB2aWV3RGF0ZSkge1xuICAgIHNldE1lcmdlZE1vZGUobmV4dE1vZGUpO1xuICAgIGlmICh2aWV3RGF0ZSkge1xuICAgICAgc2V0UGlja2VyVmFsdWUodmlld0RhdGUpO1xuICAgIH1cbiAgICB0cmlnZ2VyUGFuZWxDaGFuZ2Uodmlld0RhdGUsIG5leHRNb2RlKTtcbiAgfTtcbiAgdmFyIG9uUGFuZWxWYWx1ZVNlbGVjdCA9IGZ1bmN0aW9uIG9uUGFuZWxWYWx1ZVNlbGVjdChuZXh0VmFsdWUpIHtcbiAgICBvbkludGVybmFsU2VsZWN0KG5leHRWYWx1ZSk7XG4gICAgc2V0UGlja2VyVmFsdWUobmV4dFZhbHVlKTtcblxuICAgIC8vIFVwZGF0ZSBtb2RlIGlmIG5lZWRlZFxuICAgIGlmIChtZXJnZWRNb2RlICE9PSBwaWNrZXIpIHtcbiAgICAgIHZhciBkZWNhZGVZZWFyUXVldWUgPSBbJ2RlY2FkZScsICd5ZWFyJ107XG4gICAgICB2YXIgZGVjYWRlWWVhck1vbnRoUXVldWUgPSBbXS5jb25jYXQoZGVjYWRlWWVhclF1ZXVlLCBbJ21vbnRoJ10pO1xuICAgICAgdmFyIHBpY2tlclF1ZXVlID0ge1xuICAgICAgICBxdWFydGVyOiBbXS5jb25jYXQoZGVjYWRlWWVhclF1ZXVlLCBbJ3F1YXJ0ZXInXSksXG4gICAgICAgIHdlZWs6IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGVjYWRlWWVhck1vbnRoUXVldWUpLCBbJ3dlZWsnXSksXG4gICAgICAgIGRhdGU6IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGVjYWRlWWVhck1vbnRoUXVldWUpLCBbJ2RhdGUnXSlcbiAgICAgIH07XG4gICAgICB2YXIgcXVldWUgPSBwaWNrZXJRdWV1ZVtwaWNrZXJdIHx8IGRlY2FkZVllYXJNb250aFF1ZXVlO1xuICAgICAgdmFyIGluZGV4ID0gcXVldWUuaW5kZXhPZihtZXJnZWRNb2RlKTtcbiAgICAgIHZhciBuZXh0TW9kZSA9IHF1ZXVlW2luZGV4ICsgMV07XG4gICAgICBpZiAobmV4dE1vZGUpIHtcbiAgICAgICAgdHJpZ2dlck1vZGVDaGFuZ2UobmV4dE1vZGUsIG5leHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IEhvdmVyIERhdGUgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGhvdmVyUmFuZ2VEYXRlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBlbmQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaG92ZXJSYW5nZVZhbHVlKSkge1xuICAgICAgdmFyIF9ob3ZlclJhbmdlVmFsdWUgPSBfc2xpY2VkVG9BcnJheShob3ZlclJhbmdlVmFsdWUsIDIpO1xuICAgICAgc3RhcnQgPSBfaG92ZXJSYW5nZVZhbHVlWzBdO1xuICAgICAgZW5kID0gX2hvdmVyUmFuZ2VWYWx1ZVsxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBob3ZlclJhbmdlVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGZvciBub3QgZXhpc3RcbiAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaWYgaGFzIGVtcHR5XG4gICAgc3RhcnQgPSBzdGFydCB8fCBlbmQ7XG4gICAgZW5kID0gZW5kIHx8IHN0YXJ0O1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5pc0FmdGVyKHN0YXJ0LCBlbmQpID8gW2VuZCwgc3RhcnRdIDogW3N0YXJ0LCBlbmRdO1xuICB9LCBbaG92ZXJSYW5nZVZhbHVlLCBnZW5lcmF0ZUNvbmZpZ10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IENvbXBvbmVudHMgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPj4+IGNlbGxSZW5kZXJcbiAgdmFyIG9uSW50ZXJuYWxDZWxsUmVuZGVyID0gdXNlQ2VsbFJlbmRlcihjZWxsUmVuZGVyLCBkYXRlUmVuZGVyLCBtb250aENlbGxSZW5kZXIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09IENvbXBvbmVudHMgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIFBhbmVsQ29tcG9uZW50ID0gY29tcG9uZW50c1tpbnRlcm5hbE1vZGVdIHx8IERlZmF1bHRDb21wb25lbnRzW2ludGVybmFsTW9kZV0gfHwgRGF0ZVBhbmVsO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBDb250ZXh0ID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHBhcmVudEhhY2tDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChQaWNrZXJIYWNrQ29udGV4dCk7XG4gIHZhciBwaWNrZXJQYW5lbENvbnRleHQgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwYXJlbnRIYWNrQ29udGV4dCksIHt9LCB7XG4gICAgICBoaWRlSGVhZGVyOiBoaWRlSGVhZGVyXG4gICAgfSk7XG4gIH0sIFtwYXJlbnRIYWNrQ29udGV4dCwgaGlkZUhlYWRlcl0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuaW5ncyA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuaW5nKCFtZXJnZWRWYWx1ZSB8fCBtZXJnZWRWYWx1ZS5ldmVyeShmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuaXNWYWxpZGF0ZSh2YWwpO1xuICAgIH0pLCAnSW52YWxpZGF0ZSBkYXRlIHBhc3MgdG8gYHZhbHVlYCBvciBgZGVmYXVsdFZhbHVlYC4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHBhbmVsQ2xzID0gXCJcIi5jb25jYXQobWVyZ2VkUHJlZml4Q2xzLCBcIi1wYW5lbFwiKTtcbiAgdmFyIHBhbmVsUHJvcHMgPSBwaWNrUHJvcHMocHJvcHMsIFtcbiAgLy8gV2Vla1xuICAnc2hvd1dlZWsnLFxuICAvLyBJY29uc1xuICAncHJldkljb24nLCAnbmV4dEljb24nLCAnc3VwZXJQcmV2SWNvbicsICdzdXBlck5leHRJY29uJyxcbiAgLy8gRGlzYWJsZWRcbiAgJ2Rpc2FibGVkRGF0ZScsICdtaW5EYXRlJywgJ21heERhdGUnLFxuICAvLyBIb3ZlclxuICAnb25Ib3ZlciddKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBpY2tlckhhY2tDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHBpY2tlclBhbmVsQ29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcmVmOiByb290UmVmLFxuICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocGFuZWxDbHMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocGFuZWxDbHMsIFwiLXJ0bFwiKSwgZGlyZWN0aW9uID09PSAncnRsJykpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcGFuZWxQcm9wcywge1xuICAgIC8vIFRpbWVcbiAgICBzaG93VGltZTogbWVyZ2VkU2hvd1RpbWVcbiAgICAvLyBNSVNDXG4gICAgLFxuICAgIHByZWZpeENsczogbWVyZ2VkUHJlZml4Q2xzLFxuICAgIGxvY2FsZTogZmlsbGVkTG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICAgIC8vIE1vZGVcbiAgICAsXG4gICAgb25Nb2RlQ2hhbmdlOiB0cmlnZ2VyTW9kZUNoYW5nZVxuICAgIC8vIFZhbHVlXG4gICAgLFxuICAgIHBpY2tlclZhbHVlOiBtZXJnZWRQaWNrZXJWYWx1ZSxcbiAgICBvblBpY2tlclZhbHVlQ2hhbmdlOiBmdW5jdGlvbiBvblBpY2tlclZhbHVlQ2hhbmdlKG5leHRQaWNrZXJWYWx1ZSkge1xuICAgICAgc2V0UGlja2VyVmFsdWUobmV4dFBpY2tlclZhbHVlLCB0cnVlKTtcbiAgICB9LFxuICAgIHZhbHVlOiBtZXJnZWRWYWx1ZVswXSxcbiAgICBvblNlbGVjdDogb25QYW5lbFZhbHVlU2VsZWN0LFxuICAgIHZhbHVlczogbWVyZ2VkVmFsdWVcbiAgICAvLyBSZW5kZXJcbiAgICAsXG4gICAgY2VsbFJlbmRlcjogb25JbnRlcm5hbENlbGxSZW5kZXJcbiAgICAvLyBIb3ZlclxuICAgICxcbiAgICBob3ZlclJhbmdlVmFsdWU6IGhvdmVyUmFuZ2VEYXRlLFxuICAgIGhvdmVyVmFsdWU6IGhvdmVyVmFsdWVcbiAgfSkpKSk7XG59XG52YXIgUmVmUGFuZWxQaWNrZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QubWVtbyggLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoUGlja2VyUGFuZWwpKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlZlBhbmVsUGlja2VyLmRpc3BsYXlOYW1lID0gJ1BhbmVsUGlja2VyJztcbn1cblxuLy8gTWFrZSBzdXBwb3J0IGdlbmVyaWNcbmV4cG9ydCBkZWZhdWx0IFJlZlBhbmVsUGlja2VyOyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgVHJpZ2dlciBmcm9tICdAcmMtY29tcG9uZW50L3RyaWdnZXInO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRSZWFsUGxhY2VtZW50IH0gZnJvbSBcIi4uL3V0aWxzL3VpVXRpbFwiO1xuaW1wb3J0IFBpY2tlckNvbnRleHQgZnJvbSBcIi4uL1BpY2tlcklucHV0L2NvbnRleHRcIjtcbnZhciBCVUlMVF9JTl9QTEFDRU1FTlRTID0ge1xuICBib3R0b21MZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ3RsJywgJ2JsJ10sXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9LFxuICBib3R0b21SaWdodDoge1xuICAgIHBvaW50czogWyd0cicsICdiciddLFxuICAgIG9mZnNldDogWzAsIDRdLFxuICAgIG92ZXJmbG93OiB7XG4gICAgICBhZGp1c3RYOiAxLFxuICAgICAgYWRqdXN0WTogMVxuICAgIH1cbiAgfSxcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydibCcsICd0bCddLFxuICAgIG9mZnNldDogWzAsIC00XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMCxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIHRvcFJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ3RyJ10sXG4gICAgb2Zmc2V0OiBbMCwgLTRdLFxuICAgIG92ZXJmbG93OiB7XG4gICAgICBhZGp1c3RYOiAwLFxuICAgICAgYWRqdXN0WTogMVxuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIFBpY2tlclRyaWdnZXIoX3JlZikge1xuICB2YXIgcG9wdXBFbGVtZW50ID0gX3JlZi5wb3B1cEVsZW1lbnQsXG4gICAgcG9wdXBTdHlsZSA9IF9yZWYucG9wdXBTdHlsZSxcbiAgICBwb3B1cENsYXNzTmFtZSA9IF9yZWYucG9wdXBDbGFzc05hbWUsXG4gICAgcG9wdXBBbGlnbiA9IF9yZWYucG9wdXBBbGlnbixcbiAgICB0cmFuc2l0aW9uTmFtZSA9IF9yZWYudHJhbnNpdGlvbk5hbWUsXG4gICAgZ2V0UG9wdXBDb250YWluZXIgPSBfcmVmLmdldFBvcHVwQ29udGFpbmVyLFxuICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICByYW5nZSA9IF9yZWYucmFuZ2UsXG4gICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQsXG4gICAgX3JlZiRidWlsdGluUGxhY2VtZW50ID0gX3JlZi5idWlsdGluUGxhY2VtZW50cyxcbiAgICBidWlsdGluUGxhY2VtZW50cyA9IF9yZWYkYnVpbHRpblBsYWNlbWVudCA9PT0gdm9pZCAwID8gQlVJTFRfSU5fUExBQ0VNRU5UUyA6IF9yZWYkYnVpbHRpblBsYWNlbWVudCxcbiAgICBkaXJlY3Rpb24gPSBfcmVmLmRpcmVjdGlvbixcbiAgICB2aXNpYmxlID0gX3JlZi52aXNpYmxlLFxuICAgIG9uQ2xvc2UgPSBfcmVmLm9uQ2xvc2U7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VyQ29udGV4dCksXG4gICAgcHJlZml4Q2xzID0gX1JlYWN0JHVzZUNvbnRleHQucHJlZml4Q2xzO1xuICB2YXIgZHJvcGRvd25QcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLWRyb3Bkb3duXCIpO1xuICB2YXIgcmVhbFBsYWNlbWVudCA9IGdldFJlYWxQbGFjZW1lbnQocGxhY2VtZW50LCBkaXJlY3Rpb24gPT09ICdydGwnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyaWdnZXIsIHtcbiAgICBzaG93QWN0aW9uOiBbXSxcbiAgICBoaWRlQWN0aW9uOiBbJ2NsaWNrJ10sXG4gICAgcG9wdXBQbGFjZW1lbnQ6IHJlYWxQbGFjZW1lbnQsXG4gICAgYnVpbHRpblBsYWNlbWVudHM6IGJ1aWx0aW5QbGFjZW1lbnRzLFxuICAgIHByZWZpeENsczogZHJvcGRvd25QcmVmaXhDbHMsXG4gICAgcG9wdXBUcmFuc2l0aW9uTmFtZTogdHJhbnNpdGlvbk5hbWUsXG4gICAgcG9wdXA6IHBvcHVwRWxlbWVudCxcbiAgICBwb3B1cEFsaWduOiBwb3B1cEFsaWduLFxuICAgIHBvcHVwVmlzaWJsZTogdmlzaWJsZSxcbiAgICBwb3B1cENsYXNzTmFtZTogY2xhc3NOYW1lcyhwb3B1cENsYXNzTmFtZSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoZHJvcGRvd25QcmVmaXhDbHMsIFwiLXJhbmdlXCIpLCByYW5nZSksIFwiXCIuY29uY2F0KGRyb3Bkb3duUHJlZml4Q2xzLCBcIi1ydGxcIiksIGRpcmVjdGlvbiA9PT0gJ3J0bCcpKSxcbiAgICBwb3B1cFN0eWxlOiBwb3B1cFN0eWxlLFxuICAgIHN0cmV0Y2g6IFwibWluV2lkdGhcIixcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogZ2V0UG9wdXBDb250YWluZXIsXG4gICAgb25Qb3B1cFZpc2libGVDaGFuZ2U6IGZ1bmN0aW9uIG9uUG9wdXBWaXNpYmxlQ2hhbmdlKG5leHRWaXNpYmxlKSB7XG4gICAgICBpZiAoIW5leHRWaXNpYmxlKSB7XG4gICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIGNoaWxkcmVuKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFBpY2tlclRyaWdnZXI7IiwiaW1wb3J0IHsgcGlja1Byb3BzIH0gZnJvbSBcIi4uL3V0aWxzL21pc2NVdGlsXCI7XG5leHBvcnQgZnVuY3Rpb24gcGlja1RyaWdnZXJQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcGlja1Byb3BzKHByb3BzLCBbJ3BsYWNlbWVudCcsICdidWlsdGluUGxhY2VtZW50cycsICdwb3B1cEFsaWduJywgJ2dldFBvcHVwQ29udGFpbmVyJywgJ3RyYW5zaXRpb25OYW1lJywgJ2RpcmVjdGlvbiddKTtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBmdW5jdGlvbiBmaWxsVGltZUZvcm1hdChzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kLCBzaG93TWVyaWRpZW0pIHtcbiAgdmFyIHRpbWVGb3JtYXQgPSAnJztcblxuICAvLyBCYXNlIEhIOm1tOnNzXG4gIHZhciBjZWxscyA9IFtdO1xuICBpZiAoc2hvd0hvdXIpIHtcbiAgICBjZWxscy5wdXNoKHNob3dNZXJpZGllbSA/ICdoaCcgOiAnSEgnKTtcbiAgfVxuICBpZiAoc2hvd01pbnV0ZSkge1xuICAgIGNlbGxzLnB1c2goJ21tJyk7XG4gIH1cbiAgaWYgKHNob3dTZWNvbmQpIHtcbiAgICBjZWxscy5wdXNoKCdzcycpO1xuICB9XG4gIHRpbWVGb3JtYXQgPSBjZWxscy5qb2luKCc6Jyk7XG5cbiAgLy8gTWlsbGlzZWNvbmRcbiAgaWYgKHNob3dNaWxsaXNlY29uZCkge1xuICAgIHRpbWVGb3JtYXQgKz0gJy5TU1MnO1xuICB9XG5cbiAgLy8gTWVyaWRpZW1cbiAgaWYgKHNob3dNZXJpZGllbSkge1xuICAgIHRpbWVGb3JtYXQgKz0gJyBBJztcbiAgfVxuICByZXR1cm4gdGltZUZvcm1hdDtcbn1cblxuLyoqXG4gKiBVc2VkIGZvciBgdXNlRmlsbGVkUHJvcHNgIHNpbmNlIGl0IGFscmVhZHkgaW4gdGhlIFJlYWN0LnVzZU1lbW9cbiAqL1xuZnVuY3Rpb24gZmlsbExvY2FsZShsb2NhbGUsIHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQsIHVzZTEySG91cnMpIHtcbiAgLy8gTm90IGZpbGwgYG1vbnRoRm9ybWF0YCBzaW5jZSBgbG9jYWxlLnNob3J0TW9udGhzYCBoYW5kbGUgdGhpc1xuICAvLyBOb3QgZmlsbCBgY2VsbE1lcmlkaWVtRm9ybWF0YCBzaW5jZSBBTSAmIFBNIGJ5IGRlZmF1bHRcbiAgdmFyIGZpZWxkRGF0ZVRpbWVGb3JtYXQgPSBsb2NhbGUuZmllbGREYXRlVGltZUZvcm1hdCxcbiAgICBmaWVsZERhdGVGb3JtYXQgPSBsb2NhbGUuZmllbGREYXRlRm9ybWF0LFxuICAgIGZpZWxkVGltZUZvcm1hdCA9IGxvY2FsZS5maWVsZFRpbWVGb3JtYXQsXG4gICAgZmllbGRNb250aEZvcm1hdCA9IGxvY2FsZS5maWVsZE1vbnRoRm9ybWF0LFxuICAgIGZpZWxkWWVhckZvcm1hdCA9IGxvY2FsZS5maWVsZFllYXJGb3JtYXQsXG4gICAgZmllbGRXZWVrRm9ybWF0ID0gbG9jYWxlLmZpZWxkV2Vla0Zvcm1hdCxcbiAgICBmaWVsZFF1YXJ0ZXJGb3JtYXQgPSBsb2NhbGUuZmllbGRRdWFydGVyRm9ybWF0LFxuICAgIHllYXJGb3JtYXQgPSBsb2NhbGUueWVhckZvcm1hdCxcbiAgICBjZWxsWWVhckZvcm1hdCA9IGxvY2FsZS5jZWxsWWVhckZvcm1hdCxcbiAgICBjZWxsUXVhcnRlckZvcm1hdCA9IGxvY2FsZS5jZWxsUXVhcnRlckZvcm1hdCxcbiAgICBkYXlGb3JtYXQgPSBsb2NhbGUuZGF5Rm9ybWF0LFxuICAgIGNlbGxEYXRlRm9ybWF0ID0gbG9jYWxlLmNlbGxEYXRlRm9ybWF0O1xuICB2YXIgdGltZUZvcm1hdCA9IGZpbGxUaW1lRm9ybWF0KHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQsIHVzZTEySG91cnMpO1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBsb2NhbGUpLCB7fSwge1xuICAgIGZpZWxkRGF0ZVRpbWVGb3JtYXQ6IGZpZWxkRGF0ZVRpbWVGb3JtYXQgfHwgXCJZWVlZLU1NLUREIFwiLmNvbmNhdCh0aW1lRm9ybWF0KSxcbiAgICBmaWVsZERhdGVGb3JtYXQ6IGZpZWxkRGF0ZUZvcm1hdCB8fCAnWVlZWS1NTS1ERCcsXG4gICAgZmllbGRUaW1lRm9ybWF0OiBmaWVsZFRpbWVGb3JtYXQgfHwgdGltZUZvcm1hdCxcbiAgICBmaWVsZE1vbnRoRm9ybWF0OiBmaWVsZE1vbnRoRm9ybWF0IHx8ICdZWVlZLU1NJyxcbiAgICBmaWVsZFllYXJGb3JtYXQ6IGZpZWxkWWVhckZvcm1hdCB8fCAnWVlZWScsXG4gICAgZmllbGRXZWVrRm9ybWF0OiBmaWVsZFdlZWtGb3JtYXQgfHwgJ2dnZ2ctd28nLFxuICAgIGZpZWxkUXVhcnRlckZvcm1hdDogZmllbGRRdWFydGVyRm9ybWF0IHx8ICdZWVlZLVtRXVEnLFxuICAgIHllYXJGb3JtYXQ6IHllYXJGb3JtYXQgfHwgJ1lZWVknLFxuICAgIGNlbGxZZWFyRm9ybWF0OiBjZWxsWWVhckZvcm1hdCB8fCAnWVlZWScsXG4gICAgY2VsbFF1YXJ0ZXJGb3JtYXQ6IGNlbGxRdWFydGVyRm9ybWF0IHx8ICdbUV1RJyxcbiAgICBjZWxsRGF0ZUZvcm1hdDogY2VsbERhdGVGb3JtYXQgfHwgZGF5Rm9ybWF0IHx8ICdEJ1xuICB9KTtcbn1cblxuLyoqXG4gKiBGaWxsIGxvY2FsZSBmb3JtYXQgYXMgc3RhcnQgdXBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTG9jYWxlKGxvY2FsZSwgc2hvd1Byb3BzKSB7XG4gIHZhciBzaG93SG91ciA9IHNob3dQcm9wcy5zaG93SG91cixcbiAgICBzaG93TWludXRlID0gc2hvd1Byb3BzLnNob3dNaW51dGUsXG4gICAgc2hvd1NlY29uZCA9IHNob3dQcm9wcy5zaG93U2Vjb25kLFxuICAgIHNob3dNaWxsaXNlY29uZCA9IHNob3dQcm9wcy5zaG93TWlsbGlzZWNvbmQsXG4gICAgdXNlMTJIb3VycyA9IHNob3dQcm9wcy51c2UxMkhvdXJzO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZpbGxMb2NhbGUobG9jYWxlLCBzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kLCB1c2UxMkhvdXJzKTtcbiAgfSwgW2xvY2FsZSwgc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCwgdXNlMTJIb3Vyc10pO1xufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFN5bmMgdmFsdWUgd2l0aCBzdGF0ZS5cbiAqIFRoaXMgc2hvdWxkIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWwgd2hpY2ggbm90IGFmZmVjdCBvdXRzaWRlIGNhbGN1bGF0aW9uLlxuICogU2luY2UgaXQncyBub3Qgc2FmZSBmb3Igc3VzcGVuc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVN5bmNTdGF0ZShkZWZhdWx0VmFsdWUsIGNvbnRyb2xsZWRWYWx1ZSkge1xuICB2YXIgdmFsdWVSZWYgPSBSZWFjdC51c2VSZWYoZGVmYXVsdFZhbHVlKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBmb3JjZVVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiBnZXR0ZXIodXNlQ29udHJvbGxlZFZhbHVlRmlyc3QpIHtcbiAgICByZXR1cm4gdXNlQ29udHJvbGxlZFZhbHVlRmlyc3QgJiYgY29udHJvbGxlZFZhbHVlICE9PSB1bmRlZmluZWQgPyBjb250cm9sbGVkVmFsdWUgOiB2YWx1ZVJlZi5jdXJyZW50O1xuICB9O1xuICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gc2V0dGVyKG5leHRWYWx1ZSkge1xuICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBuZXh0VmFsdWU7XG4gICAgZm9yY2VVcGRhdGUoe30pO1xuICB9O1xuICByZXR1cm4gW2dldHRlciwgc2V0dGVyLCBnZXR0ZXIodHJ1ZSldO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCB7IGdldFJvd0Zvcm1hdCwgcGlja1Byb3BzLCB0b0FycmF5IH0gZnJvbSBcIi4uL3V0aWxzL21pc2NVdGlsXCI7XG5pbXBvcnQgeyBmaWxsVGltZUZvcm1hdCB9IGZyb20gXCIuL3VzZUxvY2FsZVwiO1xuZnVuY3Rpb24gY2hlY2tTaG93KGZvcm1hdCwga2V5d29yZHMsIHNob3cpIHtcbiAgcmV0dXJuIHNob3cgIT09IG51bGwgJiYgc2hvdyAhPT0gdm9pZCAwID8gc2hvdyA6IGtleXdvcmRzLnNvbWUoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICByZXR1cm4gZm9ybWF0LmluY2x1ZGVzKGtleXdvcmQpO1xuICB9KTtcbn1cbnZhciBzaG93VGltZUtleXMgPSBbXG4vLyAnZm9ybWF0JyxcbidzaG93Tm93JywgJ3Nob3dIb3VyJywgJ3Nob3dNaW51dGUnLCAnc2hvd1NlY29uZCcsICdzaG93TWlsbGlzZWNvbmQnLCAndXNlMTJIb3VycycsICdob3VyU3RlcCcsICdtaW51dGVTdGVwJywgJ3NlY29uZFN0ZXAnLCAnbWlsbGlzZWNvbmRTdGVwJywgJ2hpZGVEaXNhYmxlZE9wdGlvbnMnLCAnZGVmYXVsdFZhbHVlJywgJ2Rpc2FibGVkSG91cnMnLCAnZGlzYWJsZWRNaW51dGVzJywgJ2Rpc2FibGVkU2Vjb25kcycsICdkaXNhYmxlZE1pbGxpc2Vjb25kcycsICdkaXNhYmxlZFRpbWUnLCAnY2hhbmdlT25TY3JvbGwnLCAnZGVmYXVsdE9wZW5WYWx1ZSddO1xuXG4vKipcbiAqIEdldCBTaGFyZWRUaW1lUHJvcHMgZnJvbSBwcm9wcy5cbiAqL1xuZnVuY3Rpb24gcGlja1RpbWVQcm9wcyhwcm9wcykge1xuICB2YXIgdGltZVByb3BzID0gcGlja1Byb3BzKHByb3BzLCBzaG93VGltZUtleXMpO1xuICB2YXIgZm9ybWF0ID0gcHJvcHMuZm9ybWF0LFxuICAgIHBpY2tlciA9IHByb3BzLnBpY2tlcjtcbiAgdmFyIHByb3BGb3JtYXQgPSBudWxsO1xuICBpZiAoZm9ybWF0KSB7XG4gICAgcHJvcEZvcm1hdCA9IGZvcm1hdDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wRm9ybWF0KSkge1xuICAgICAgcHJvcEZvcm1hdCA9IHByb3BGb3JtYXRbMF07XG4gICAgfVxuICAgIHByb3BGb3JtYXQgPSBfdHlwZW9mKHByb3BGb3JtYXQpID09PSAnb2JqZWN0JyA/IHByb3BGb3JtYXQuZm9ybWF0IDogcHJvcEZvcm1hdDtcbiAgfVxuICBpZiAocGlja2VyID09PSAndGltZScpIHtcbiAgICB0aW1lUHJvcHMuZm9ybWF0ID0gcHJvcEZvcm1hdDtcbiAgfVxuICByZXR1cm4gW3RpbWVQcm9wcywgcHJvcEZvcm1hdF07XG59XG5mdW5jdGlvbiBpc1N0cmluZ0Zvcm1hdChmb3JtYXQpIHtcbiAgcmV0dXJuIGZvcm1hdCAmJiB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJztcbn1cbi8qKiBDaGVjayBpZiBhbGwgdGhlIHNob3dYWFggaXMgYHVuZGVmaW5lZGAgKi9cbmZ1bmN0aW9uIGV4aXN0U2hvd0NvbmZpZyhzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kKSB7XG4gIHJldHVybiBbc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZF0uc29tZShmdW5jdGlvbiAoc2hvdykge1xuICAgIHJldHVybiBzaG93ICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xufVxuXG4vKiogRmlsbCB0aGUgc2hvd1hYWCBpZiBuZWVkZWQgKi9cbmZ1bmN0aW9uIGZpbGxTaG93Q29uZmlnKGhhc1Nob3dDb25maWcsIHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQpIHtcbiAgdmFyIHBhcnNlZFNob3dIb3VyID0gc2hvd0hvdXI7XG4gIHZhciBwYXJzZWRTaG93TWludXRlID0gc2hvd01pbnV0ZTtcbiAgdmFyIHBhcnNlZFNob3dTZWNvbmQgPSBzaG93U2Vjb25kO1xuICBpZiAoIWhhc1Nob3dDb25maWcgJiYgIXBhcnNlZFNob3dIb3VyICYmICFwYXJzZWRTaG93TWludXRlICYmICFwYXJzZWRTaG93U2Vjb25kICYmICFzaG93TWlsbGlzZWNvbmQpIHtcbiAgICBwYXJzZWRTaG93SG91ciA9IHRydWU7XG4gICAgcGFyc2VkU2hvd01pbnV0ZSA9IHRydWU7XG4gICAgcGFyc2VkU2hvd1NlY29uZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoaGFzU2hvd0NvbmZpZykge1xuICAgIHZhciBfcGFyc2VkU2hvd0hvdXIsIF9wYXJzZWRTaG93TWludXRlLCBfcGFyc2VkU2hvd1NlY29uZDtcbiAgICB2YXIgZXhpc3RGYWxzZSA9IFtwYXJzZWRTaG93SG91ciwgcGFyc2VkU2hvd01pbnV0ZSwgcGFyc2VkU2hvd1NlY29uZF0uc29tZShmdW5jdGlvbiAoc2hvdykge1xuICAgICAgcmV0dXJuIHNob3cgPT09IGZhbHNlO1xuICAgIH0pO1xuICAgIHZhciBleGlzdFRydWUgPSBbcGFyc2VkU2hvd0hvdXIsIHBhcnNlZFNob3dNaW51dGUsIHBhcnNlZFNob3dTZWNvbmRdLnNvbWUoZnVuY3Rpb24gKHNob3cpIHtcbiAgICAgIHJldHVybiBzaG93ID09PSB0cnVlO1xuICAgIH0pO1xuICAgIHZhciBkZWZhdWx0U2hvdyA9IGV4aXN0RmFsc2UgPyB0cnVlIDogIWV4aXN0VHJ1ZTtcbiAgICBwYXJzZWRTaG93SG91ciA9IChfcGFyc2VkU2hvd0hvdXIgPSBwYXJzZWRTaG93SG91cikgIT09IG51bGwgJiYgX3BhcnNlZFNob3dIb3VyICE9PSB2b2lkIDAgPyBfcGFyc2VkU2hvd0hvdXIgOiBkZWZhdWx0U2hvdztcbiAgICBwYXJzZWRTaG93TWludXRlID0gKF9wYXJzZWRTaG93TWludXRlID0gcGFyc2VkU2hvd01pbnV0ZSkgIT09IG51bGwgJiYgX3BhcnNlZFNob3dNaW51dGUgIT09IHZvaWQgMCA/IF9wYXJzZWRTaG93TWludXRlIDogZGVmYXVsdFNob3c7XG4gICAgcGFyc2VkU2hvd1NlY29uZCA9IChfcGFyc2VkU2hvd1NlY29uZCA9IHBhcnNlZFNob3dTZWNvbmQpICE9PSBudWxsICYmIF9wYXJzZWRTaG93U2Vjb25kICE9PSB2b2lkIDAgPyBfcGFyc2VkU2hvd1NlY29uZCA6IGRlZmF1bHRTaG93O1xuICB9XG4gIHJldHVybiBbcGFyc2VkU2hvd0hvdXIsIHBhcnNlZFNob3dNaW51dGUsIHBhcnNlZFNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZF07XG59XG5cbi8qKlxuICogR2V0IGBzaG93SG91cmAsIGBzaG93TWludXRlYCwgYHNob3dTZWNvbmRgIG9yIG90aGVyIGZyb20gdGhlIHByb3BzLlxuICogVGhpcyBpcyBwdXJlIGZ1bmN0aW9uLCB3aWxsIG5vdCBnZXQgYHNob3dYWFhgIGZyb20gdGhlIGBmb3JtYXRgIHByb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lUHJvcHMoY29tcG9uZW50UHJvcHMpIHtcbiAgdmFyIHNob3dUaW1lID0gY29tcG9uZW50UHJvcHMuc2hvd1RpbWU7XG4gIHZhciBfcGlja1RpbWVQcm9wcyA9IHBpY2tUaW1lUHJvcHMoY29tcG9uZW50UHJvcHMpLFxuICAgIF9waWNrVGltZVByb3BzMiA9IF9zbGljZWRUb0FycmF5KF9waWNrVGltZVByb3BzLCAyKSxcbiAgICBwaWNrZWRQcm9wcyA9IF9waWNrVGltZVByb3BzMlswXSxcbiAgICBwcm9wRm9ybWF0ID0gX3BpY2tUaW1lUHJvcHMyWzFdO1xuICB2YXIgc2hvd1RpbWVDb25maWcgPSBzaG93VGltZSAmJiBfdHlwZW9mKHNob3dUaW1lKSA9PT0gJ29iamVjdCcgPyBzaG93VGltZSA6IHt9O1xuICB2YXIgdGltZUNvbmZpZyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgZGVmYXVsdE9wZW5WYWx1ZTogc2hvd1RpbWVDb25maWcuZGVmYXVsdE9wZW5WYWx1ZSB8fCBzaG93VGltZUNvbmZpZy5kZWZhdWx0VmFsdWVcbiAgfSwgcGlja2VkUHJvcHMpLCBzaG93VGltZUNvbmZpZyk7XG4gIHZhciBzaG93TWlsbGlzZWNvbmQgPSB0aW1lQ29uZmlnLnNob3dNaWxsaXNlY29uZDtcbiAgdmFyIHNob3dIb3VyID0gdGltZUNvbmZpZy5zaG93SG91cixcbiAgICBzaG93TWludXRlID0gdGltZUNvbmZpZy5zaG93TWludXRlLFxuICAgIHNob3dTZWNvbmQgPSB0aW1lQ29uZmlnLnNob3dTZWNvbmQ7XG4gIHZhciBoYXNTaG93Q29uZmlnID0gZXhpc3RTaG93Q29uZmlnKHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQpO1xuICB2YXIgX2ZpbGxTaG93Q29uZmlnID0gZmlsbFNob3dDb25maWcoaGFzU2hvd0NvbmZpZywgc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCk7XG4gIHZhciBfZmlsbFNob3dDb25maWcyID0gX3NsaWNlZFRvQXJyYXkoX2ZpbGxTaG93Q29uZmlnLCAzKTtcbiAgc2hvd0hvdXIgPSBfZmlsbFNob3dDb25maWcyWzBdO1xuICBzaG93TWludXRlID0gX2ZpbGxTaG93Q29uZmlnMlsxXTtcbiAgc2hvd1NlY29uZCA9IF9maWxsU2hvd0NvbmZpZzJbMl07XG4gIHJldHVybiBbdGltZUNvbmZpZywgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aW1lQ29uZmlnKSwge30sIHtcbiAgICBzaG93SG91cjogc2hvd0hvdXIsXG4gICAgc2hvd01pbnV0ZTogc2hvd01pbnV0ZSxcbiAgICBzaG93U2Vjb25kOiBzaG93U2Vjb25kLFxuICAgIHNob3dNaWxsaXNlY29uZDogc2hvd01pbGxpc2Vjb25kXG4gIH0pLCB0aW1lQ29uZmlnLmZvcm1hdCwgcHJvcEZvcm1hdF07XG59XG5leHBvcnQgZnVuY3Rpb24gZmlsbFNob3dUaW1lQ29uZmlnKHBpY2tlciwgc2hvd1RpbWVGb3JtYXQsIHByb3BGb3JtYXQsIHRpbWVDb25maWcsIGxvY2FsZSkge1xuICB2YXIgaXNUaW1lUGlja2VyID0gcGlja2VyID09PSAndGltZSc7XG4gIGlmIChwaWNrZXIgPT09ICdkYXRldGltZScgfHwgaXNUaW1lUGlja2VyKSB7XG4gICAgdmFyIHBpY2tlZFByb3BzID0gdGltZUNvbmZpZztcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT0gQmFzZUZvcm1hdCA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFyIGRlZmF1bHRMb2NhbGVGb3JtYXQgPSBnZXRSb3dGb3JtYXQocGlja2VyLCBsb2NhbGUsIG51bGwpO1xuICAgIHZhciBiYXNlbGluZUZvcm1hdCA9IGRlZmF1bHRMb2NhbGVGb3JtYXQ7XG4gICAgdmFyIGZvcm1hdExpc3QgPSBbc2hvd1RpbWVGb3JtYXQsIHByb3BGb3JtYXRdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHRvQXJyYXkoZm9ybWF0TGlzdFtpXSlbMF07XG4gICAgICBpZiAoaXNTdHJpbmdGb3JtYXQoZm9ybWF0KSkge1xuICAgICAgICBiYXNlbGluZUZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBTaG93ID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICB2YXIgc2hvd0hvdXIgPSBwaWNrZWRQcm9wcy5zaG93SG91cixcbiAgICAgIHNob3dNaW51dGUgPSBwaWNrZWRQcm9wcy5zaG93TWludXRlLFxuICAgICAgc2hvd1NlY29uZCA9IHBpY2tlZFByb3BzLnNob3dTZWNvbmQsXG4gICAgICBzaG93TWlsbGlzZWNvbmQgPSBwaWNrZWRQcm9wcy5zaG93TWlsbGlzZWNvbmQ7XG4gICAgdmFyIHVzZTEySG91cnMgPSBwaWNrZWRQcm9wcy51c2UxMkhvdXJzO1xuICAgIHZhciBzaG93TWVyaWRpZW0gPSBjaGVja1Nob3coYmFzZWxpbmVGb3JtYXQsIFsnYScsICdBJywgJ0xUJywgJ0xMTCcsICdMVFMnXSwgdXNlMTJIb3Vycyk7XG4gICAgdmFyIGhhc1Nob3dDb25maWcgPSBleGlzdFNob3dDb25maWcoc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCk7XG5cbiAgICAvLyBGaWxsIHdpdGggZm9ybWF0LCBpZiBuZWVkZWRcbiAgICBpZiAoIWhhc1Nob3dDb25maWcpIHtcbiAgICAgIHNob3dIb3VyID0gY2hlY2tTaG93KGJhc2VsaW5lRm9ybWF0LCBbJ0gnLCAnaCcsICdrJywgJ0xUJywgJ0xMTCddKTtcbiAgICAgIHNob3dNaW51dGUgPSBjaGVja1Nob3coYmFzZWxpbmVGb3JtYXQsIFsnbScsICdMVCcsICdMTEwnXSk7XG4gICAgICBzaG93U2Vjb25kID0gY2hlY2tTaG93KGJhc2VsaW5lRm9ybWF0LCBbJ3MnLCAnTFRTJ10pO1xuICAgICAgc2hvd01pbGxpc2Vjb25kID0gY2hlY2tTaG93KGJhc2VsaW5lRm9ybWF0LCBbJ1NTUyddKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBpZiBhbGwgY2FuIG5vdCBzZWVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRm9ybWF0ID09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhciBfZmlsbFNob3dDb25maWczID0gZmlsbFNob3dDb25maWcoaGFzU2hvd0NvbmZpZywgc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCk7XG4gICAgdmFyIF9maWxsU2hvd0NvbmZpZzQgPSBfc2xpY2VkVG9BcnJheShfZmlsbFNob3dDb25maWczLCAzKTtcbiAgICBzaG93SG91ciA9IF9maWxsU2hvd0NvbmZpZzRbMF07XG4gICAgc2hvd01pbnV0ZSA9IF9maWxsU2hvd0NvbmZpZzRbMV07XG4gICAgc2hvd1NlY29uZCA9IF9maWxsU2hvd0NvbmZpZzRbMl07XG4gICAgdmFyIHRpbWVGb3JtYXQgPSBzaG93VGltZUZvcm1hdCB8fCBmaWxsVGltZUZvcm1hdChzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kLCBzaG93TWVyaWRpZW0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFByb3BzID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwaWNrZWRQcm9wcyksIHt9LCB7XG4gICAgICAvLyBGb3JtYXRcbiAgICAgIGZvcm1hdDogdGltZUZvcm1hdCxcbiAgICAgIC8vIFNob3cgQ29uZmlnXG4gICAgICBzaG93SG91cjogc2hvd0hvdXIsXG4gICAgICBzaG93TWludXRlOiBzaG93TWludXRlLFxuICAgICAgc2hvd1NlY29uZDogc2hvd1NlY29uZCxcbiAgICAgIHNob3dNaWxsaXNlY29uZDogc2hvd01pbGxpc2Vjb25kLFxuICAgICAgdXNlMTJIb3Vyczogc2hvd01lcmlkaWVtXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgd2FybmluZyB9IGZyb20gJ3JjLXV0aWwnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmluZFZhbGlkYXRlVGltZSB9IGZyb20gXCIuLi9QaWNrZXJQYW5lbC9UaW1lUGFuZWwvVGltZVBhbmVsQm9keS91dGlsXCI7XG5pbXBvcnQgeyBsZWZ0UGFkIH0gZnJvbSBcIi4uL3V0aWxzL21pc2NVdGlsXCI7XG5mdW5jdGlvbiBlbXB0eURpc2FibGVkKCkge1xuICByZXR1cm4gW107XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVVuaXRzKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHN0ZXAgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gIHZhciBoaWRlRGlzYWJsZWRPcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgdmFyIGRpc2FibGVkVW5pdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IFtdO1xuICB2YXIgcGFkID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAyO1xuICB2YXIgdW5pdHMgPSBbXTtcbiAgdmFyIGludGVnZXJTdGVwID0gc3RlcCA+PSAxID8gc3RlcCB8IDAgOiAxO1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpICs9IGludGVnZXJTdGVwKSB7XG4gICAgdmFyIGRpc2FibGVkID0gZGlzYWJsZWRVbml0cy5pbmNsdWRlcyhpKTtcbiAgICBpZiAoIWRpc2FibGVkIHx8ICFoaWRlRGlzYWJsZWRPcHRpb25zKSB7XG4gICAgICB1bml0cy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGxlZnRQYWQoaSwgcGFkKSxcbiAgICAgICAgdmFsdWU6IGksXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bml0cztcbn1cblxuLyoqXG4gKiBQYXJzZSB0aW1lIHByb3BzIHRvIGdldCB1dGlsIGluZm9cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGltZUluZm8oZ2VuZXJhdGVDb25maWcpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIF9yZWYgPSBwcm9wcyB8fCB7fSxcbiAgICB1c2UxMkhvdXJzID0gX3JlZi51c2UxMkhvdXJzLFxuICAgIF9yZWYkaG91clN0ZXAgPSBfcmVmLmhvdXJTdGVwLFxuICAgIGhvdXJTdGVwID0gX3JlZiRob3VyU3RlcCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkaG91clN0ZXAsXG4gICAgX3JlZiRtaW51dGVTdGVwID0gX3JlZi5taW51dGVTdGVwLFxuICAgIG1pbnV0ZVN0ZXAgPSBfcmVmJG1pbnV0ZVN0ZXAgPT09IHZvaWQgMCA/IDEgOiBfcmVmJG1pbnV0ZVN0ZXAsXG4gICAgX3JlZiRzZWNvbmRTdGVwID0gX3JlZi5zZWNvbmRTdGVwLFxuICAgIHNlY29uZFN0ZXAgPSBfcmVmJHNlY29uZFN0ZXAgPT09IHZvaWQgMCA/IDEgOiBfcmVmJHNlY29uZFN0ZXAsXG4gICAgX3JlZiRtaWxsaXNlY29uZFN0ZXAgPSBfcmVmLm1pbGxpc2Vjb25kU3RlcCxcbiAgICBtaWxsaXNlY29uZFN0ZXAgPSBfcmVmJG1pbGxpc2Vjb25kU3RlcCA9PT0gdm9pZCAwID8gMTAwIDogX3JlZiRtaWxsaXNlY29uZFN0ZXAsXG4gICAgaGlkZURpc2FibGVkT3B0aW9ucyA9IF9yZWYuaGlkZURpc2FibGVkT3B0aW9ucyxcbiAgICBkaXNhYmxlZFRpbWUgPSBfcmVmLmRpc2FibGVkVGltZSxcbiAgICBkaXNhYmxlZEhvdXJzID0gX3JlZi5kaXNhYmxlZEhvdXJzLFxuICAgIGRpc2FibGVkTWludXRlcyA9IF9yZWYuZGlzYWJsZWRNaW51dGVzLFxuICAgIGRpc2FibGVkU2Vjb25kcyA9IF9yZWYuZGlzYWJsZWRTZWNvbmRzO1xuICB2YXIgbWVyZ2VkRGF0ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkYXRlIHx8IGdlbmVyYXRlQ29uZmlnLmdldE5vdygpO1xuICB9LCBbZGF0ZSwgZ2VuZXJhdGVDb25maWddKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gV2FybmluZ3MgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGlzSG91clN0ZXBWYWxpZCA9IDI0ICUgaG91clN0ZXAgPT09IDA7XG4gICAgdmFyIGlzTWludXRlU3RlcFZhbGlkID0gNjAgJSBtaW51dGVTdGVwID09PSAwO1xuICAgIHZhciBpc1NlY29uZFN0ZXBWYWxpZCA9IDYwICUgc2Vjb25kU3RlcCA9PT0gMDtcbiAgICB3YXJuaW5nKGlzSG91clN0ZXBWYWxpZCwgXCJgaG91clN0ZXBgIFwiLmNvbmNhdChob3VyU3RlcCwgXCIgaXMgaW52YWxpZC4gSXQgc2hvdWxkIGJlIGEgZmFjdG9yIG9mIDI0LlwiKSk7XG4gICAgd2FybmluZyhpc01pbnV0ZVN0ZXBWYWxpZCwgXCJgbWludXRlU3RlcGAgXCIuY29uY2F0KG1pbnV0ZVN0ZXAsIFwiIGlzIGludmFsaWQuIEl0IHNob3VsZCBiZSBhIGZhY3RvciBvZiA2MC5cIikpO1xuICAgIHdhcm5pbmcoaXNTZWNvbmRTdGVwVmFsaWQsIFwiYHNlY29uZFN0ZXBgIFwiLmNvbmNhdChzZWNvbmRTdGVwLCBcIiBpcyBpbnZhbGlkLiBJdCBzaG91bGQgYmUgYSBmYWN0b3Igb2YgNjAuXCIpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBEaXNhYmxlZCA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldERpc2FibGVkVGltZXMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAodGFyZ2V0RGF0ZSkge1xuICAgIHZhciBkaXNhYmxlZENvbmZpZyA9IChkaXNhYmxlZFRpbWUgPT09IG51bGwgfHwgZGlzYWJsZWRUaW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkaXNhYmxlZFRpbWUodGFyZ2V0RGF0ZSkpIHx8IHt9O1xuICAgIHJldHVybiBbZGlzYWJsZWRDb25maWcuZGlzYWJsZWRIb3VycyB8fCBkaXNhYmxlZEhvdXJzIHx8IGVtcHR5RGlzYWJsZWQsIGRpc2FibGVkQ29uZmlnLmRpc2FibGVkTWludXRlcyB8fCBkaXNhYmxlZE1pbnV0ZXMgfHwgZW1wdHlEaXNhYmxlZCwgZGlzYWJsZWRDb25maWcuZGlzYWJsZWRTZWNvbmRzIHx8IGRpc2FibGVkU2Vjb25kcyB8fCBlbXB0eURpc2FibGVkLCBkaXNhYmxlZENvbmZpZy5kaXNhYmxlZE1pbGxpc2Vjb25kcyB8fCBlbXB0eURpc2FibGVkXTtcbiAgfSwgW2Rpc2FibGVkVGltZSwgZGlzYWJsZWRIb3VycywgZGlzYWJsZWRNaW51dGVzLCBkaXNhYmxlZFNlY29uZHNdKTtcbiAgdmFyIF9SZWFjdCR1c2VNZW1vID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGlzYWJsZWRUaW1lcyhtZXJnZWREYXRlKTtcbiAgICB9LCBbbWVyZ2VkRGF0ZSwgZ2V0RGlzYWJsZWRUaW1lc10pLFxuICAgIF9SZWFjdCR1c2VNZW1vMiA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vLCA0KSxcbiAgICBtZXJnZWREaXNhYmxlZEhvdXJzID0gX1JlYWN0JHVzZU1lbW8yWzBdLFxuICAgIG1lcmdlZERpc2FibGVkTWludXRlcyA9IF9SZWFjdCR1c2VNZW1vMlsxXSxcbiAgICBtZXJnZWREaXNhYmxlZFNlY29uZHMgPSBfUmVhY3QkdXNlTWVtbzJbMl0sXG4gICAgbWVyZ2VkRGlzYWJsZWRNaWxsaXNlY29uZHMgPSBfUmVhY3QkdXNlTWVtbzJbM107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0QWxsVW5pdHMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZ2V0RGlzYWJsZWRIb3VycywgZ2V0RGlzYWJsZWRNaW51dGVzLCBnZXREaXNhYmxlZFNlY29uZHMsIGdldERpc2FibGVkTWlsbGlzZWNvbmRzKSB7XG4gICAgdmFyIGhvdXJzID0gZ2VuZXJhdGVVbml0cygwLCAyMywgaG91clN0ZXAsIGhpZGVEaXNhYmxlZE9wdGlvbnMsIGdldERpc2FibGVkSG91cnMoKSk7XG5cbiAgICAvLyBIb3Vyc1xuICAgIHZhciByb3dIb3VyVW5pdHMgPSB1c2UxMkhvdXJzID8gaG91cnMubWFwKGZ1bmN0aW9uICh1bml0KSB7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB1bml0KSwge30sIHtcbiAgICAgICAgbGFiZWw6IGxlZnRQYWQodW5pdC52YWx1ZSAlIDEyIHx8IDEyLCAyKVxuICAgICAgfSk7XG4gICAgfSkgOiBob3VycztcblxuICAgIC8vIE1pbnV0ZXNcbiAgICB2YXIgZ2V0TWludXRlVW5pdHMgPSBmdW5jdGlvbiBnZXRNaW51dGVVbml0cyhuZXh0SG91cikge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlVW5pdHMoMCwgNTksIG1pbnV0ZVN0ZXAsIGhpZGVEaXNhYmxlZE9wdGlvbnMsIGdldERpc2FibGVkTWludXRlcyhuZXh0SG91cikpO1xuICAgIH07XG5cbiAgICAvLyBTZWNvbmRzXG4gICAgdmFyIGdldFNlY29uZFVuaXRzID0gZnVuY3Rpb24gZ2V0U2Vjb25kVW5pdHMobmV4dEhvdXIsIG5leHRNaW51dGUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZVVuaXRzKDAsIDU5LCBzZWNvbmRTdGVwLCBoaWRlRGlzYWJsZWRPcHRpb25zLCBnZXREaXNhYmxlZFNlY29uZHMobmV4dEhvdXIsIG5leHRNaW51dGUpKTtcbiAgICB9O1xuXG4gICAgLy8gTWlsbGlzZWNvbmRzXG4gICAgdmFyIGdldE1pbGxpc2Vjb25kVW5pdHMgPSBmdW5jdGlvbiBnZXRNaWxsaXNlY29uZFVuaXRzKG5leHRIb3VyLCBuZXh0TWludXRlLCBuZXh0U2Vjb25kKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVVbml0cygwLCA5OTksIG1pbGxpc2Vjb25kU3RlcCwgaGlkZURpc2FibGVkT3B0aW9ucywgZ2V0RGlzYWJsZWRNaWxsaXNlY29uZHMobmV4dEhvdXIsIG5leHRNaW51dGUsIG5leHRTZWNvbmQpLCAzKTtcbiAgICB9O1xuICAgIHJldHVybiBbcm93SG91clVuaXRzLCBnZXRNaW51dGVVbml0cywgZ2V0U2Vjb25kVW5pdHMsIGdldE1pbGxpc2Vjb25kVW5pdHNdO1xuICB9LCBbaGlkZURpc2FibGVkT3B0aW9ucywgaG91clN0ZXAsIHVzZTEySG91cnMsIG1pbGxpc2Vjb25kU3RlcCwgbWludXRlU3RlcCwgc2Vjb25kU3RlcF0pO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8zID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0QWxsVW5pdHMobWVyZ2VkRGlzYWJsZWRIb3VycywgbWVyZ2VkRGlzYWJsZWRNaW51dGVzLCBtZXJnZWREaXNhYmxlZFNlY29uZHMsIG1lcmdlZERpc2FibGVkTWlsbGlzZWNvbmRzKTtcbiAgICB9LCBbZ2V0QWxsVW5pdHMsIG1lcmdlZERpc2FibGVkSG91cnMsIG1lcmdlZERpc2FibGVkTWludXRlcywgbWVyZ2VkRGlzYWJsZWRTZWNvbmRzLCBtZXJnZWREaXNhYmxlZE1pbGxpc2Vjb25kc10pLFxuICAgIF9SZWFjdCR1c2VNZW1vNCA9IF9zbGljZWRUb0FycmF5KF9SZWFjdCR1c2VNZW1vMywgNCksXG4gICAgcm93SG91clVuaXRzID0gX1JlYWN0JHVzZU1lbW80WzBdLFxuICAgIGdldE1pbnV0ZVVuaXRzID0gX1JlYWN0JHVzZU1lbW80WzFdLFxuICAgIGdldFNlY29uZFVuaXRzID0gX1JlYWN0JHVzZU1lbW80WzJdLFxuICAgIGdldE1pbGxpc2Vjb25kVW5pdHMgPSBfUmVhY3QkdXNlTWVtbzRbM107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFZhbGlkYXRlID09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogR2V0IHZhbGlkYXRlIHRpbWUgd2l0aCBgZGlzYWJsZWRUaW1lYCwgYGNlcnRhaW5EYXRlYCB0byBzcGVjaWZpYyB0aGUgZGF0ZSBuZWVkIHRvIGNoZWNrXG4gICAqL1xuICB2YXIgZ2V0VmFsaWRUaW1lID0gZnVuY3Rpb24gZ2V0VmFsaWRUaW1lKG5leHRUaW1lLCBjZXJ0YWluRGF0ZSkge1xuICAgIHZhciBnZXRDaGVja0hvdXJVbml0cyA9IGZ1bmN0aW9uIGdldENoZWNrSG91clVuaXRzKCkge1xuICAgICAgcmV0dXJuIHJvd0hvdXJVbml0cztcbiAgICB9O1xuICAgIHZhciBnZXRDaGVja01pbnV0ZVVuaXRzID0gZ2V0TWludXRlVW5pdHM7XG4gICAgdmFyIGdldENoZWNrU2Vjb25kVW5pdHMgPSBnZXRTZWNvbmRVbml0cztcbiAgICB2YXIgZ2V0Q2hlY2tNaWxsaXNlY29uZFVuaXRzID0gZ2V0TWlsbGlzZWNvbmRVbml0cztcbiAgICBpZiAoY2VydGFpbkRhdGUpIHtcbiAgICAgIHZhciBfZ2V0RGlzYWJsZWRUaW1lcyA9IGdldERpc2FibGVkVGltZXMoY2VydGFpbkRhdGUpLFxuICAgICAgICBfZ2V0RGlzYWJsZWRUaW1lczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0RGlzYWJsZWRUaW1lcywgNCksXG4gICAgICAgIHRhcmdldERpc2FibGVkSG91cnMgPSBfZ2V0RGlzYWJsZWRUaW1lczJbMF0sXG4gICAgICAgIHRhcmdldERpc2FibGVkTWludXRlcyA9IF9nZXREaXNhYmxlZFRpbWVzMlsxXSxcbiAgICAgICAgdGFyZ2V0RGlzYWJsZWRTZWNvbmRzID0gX2dldERpc2FibGVkVGltZXMyWzJdLFxuICAgICAgICB0YXJnZXREaXNhYmxlZE1pbGxpc2Vjb25kcyA9IF9nZXREaXNhYmxlZFRpbWVzMlszXTtcbiAgICAgIHZhciBfZ2V0QWxsVW5pdHMgPSBnZXRBbGxVbml0cyh0YXJnZXREaXNhYmxlZEhvdXJzLCB0YXJnZXREaXNhYmxlZE1pbnV0ZXMsIHRhcmdldERpc2FibGVkU2Vjb25kcywgdGFyZ2V0RGlzYWJsZWRNaWxsaXNlY29uZHMpLFxuICAgICAgICBfZ2V0QWxsVW5pdHMyID0gX3NsaWNlZFRvQXJyYXkoX2dldEFsbFVuaXRzLCA0KSxcbiAgICAgICAgdGFyZ2V0Um93SG91clVuaXRzID0gX2dldEFsbFVuaXRzMlswXSxcbiAgICAgICAgdGFyZ2V0R2V0TWludXRlVW5pdHMgPSBfZ2V0QWxsVW5pdHMyWzFdLFxuICAgICAgICB0YXJnZXRHZXRTZWNvbmRVbml0cyA9IF9nZXRBbGxVbml0czJbMl0sXG4gICAgICAgIHRhcmdldEdldE1pbGxpc2Vjb25kVW5pdHMgPSBfZ2V0QWxsVW5pdHMyWzNdO1xuICAgICAgZ2V0Q2hlY2tIb3VyVW5pdHMgPSBmdW5jdGlvbiBnZXRDaGVja0hvdXJVbml0cygpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFJvd0hvdXJVbml0cztcbiAgICAgIH07XG4gICAgICBnZXRDaGVja01pbnV0ZVVuaXRzID0gdGFyZ2V0R2V0TWludXRlVW5pdHM7XG4gICAgICBnZXRDaGVja1NlY29uZFVuaXRzID0gdGFyZ2V0R2V0U2Vjb25kVW5pdHM7XG4gICAgICBnZXRDaGVja01pbGxpc2Vjb25kVW5pdHMgPSB0YXJnZXRHZXRNaWxsaXNlY29uZFVuaXRzO1xuICAgIH1cbiAgICB2YXIgdmFsaWRhdGVEYXRlID0gZmluZFZhbGlkYXRlVGltZShuZXh0VGltZSwgZ2V0Q2hlY2tIb3VyVW5pdHMsIGdldENoZWNrTWludXRlVW5pdHMsIGdldENoZWNrU2Vjb25kVW5pdHMsIGdldENoZWNrTWlsbGlzZWNvbmRVbml0cywgZ2VuZXJhdGVDb25maWcpO1xuICAgIHJldHVybiB2YWxpZGF0ZURhdGU7XG4gIH07XG4gIHJldHVybiBbXG4gIC8vIGdldFZhbGlkVGltZVxuICBnZXRWYWxpZFRpbWUsXG4gIC8vIFVuaXRzXG4gIHJvd0hvdXJVbml0cywgZ2V0TWludXRlVW5pdHMsIGdldFNlY29uZFVuaXRzLCBnZXRNaWxsaXNlY29uZFVuaXRzXTtcbn0iLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IHsgaXNTYW1lIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVVdGlsXCI7XG4vKipcbiAqIFRvZ2dsZXMgdGhlIHByZXNlbmNlIG9mIGEgdmFsdWUgaW4gYW4gYXJyYXkuXG4gKiBJZiB0aGUgdmFsdWUgZXhpc3RzIGluIHRoZSBhcnJheSwgcmVtb3ZlZCBpdC5cbiAqIEVsc2UgYWRkIGl0LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGVEYXRlcyhnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBwYW5lbE1vZGUpIHtcbiAgZnVuY3Rpb24gdG9nZ2xlRGF0ZXMobGlzdCwgdGFyZ2V0KSB7XG4gICAgdmFyIGluZGV4ID0gbGlzdC5maW5kSW5kZXgoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgIHJldHVybiBpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgZGF0ZSwgdGFyZ2V0LCBwYW5lbE1vZGUpO1xuICAgIH0pO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGxpc3QpLCBbdGFyZ2V0XSk7XG4gICAgfVxuICAgIHZhciBzbGljZUxpc3QgPSBfdG9Db25zdW1hYmxlQXJyYXkobGlzdCk7XG4gICAgc2xpY2VMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHNsaWNlTGlzdDtcbiAgfVxuICByZXR1cm4gdG9nZ2xlRGF0ZXM7XG59IiwiLyoqXG4gKiBXaGF0J3MgbmV3P1xuICogLSBDb21tb25cbiAqICAtIFtCcmVha10gU3VwcG9ydCBzcGVjaWFsIHllYXIgZm9ybWF0LCBhbGwgdGhlIHllYXIgd2lsbCBmb2xsb3cgdGhlIGxvY2FsZSBjb25maWcuXG4gKiAgLSBCbHVyIGFsbCBvZiBmaWVsZCB3aWxsIHRyaWdnZXIgYG9uQ2hhbmdlYCBpZiB2YWxpZGF0ZVxuICogIC0gU3VwcG9ydCBgcHJlc2VydmVJbnZhbGlkT25CbHVyYCB0byBub3QgdG8gY2xlYW4gaW5wdXQgaWYgaW52YWxpZCBhbmQgcmVtb3ZlIGBjaGFuZ2VPbkJsdXJgXG4gKiAgLSBgcGlja2VyVmFsdWVgIGlzIG5vdyBmdWxsIGNvbnRyb2xsZWRcbiAqICAgIC0gYGRlZmF1bHRQaWNrZXJWYWx1ZWAgd2lsbCB0YWtlIGVmZmVjdCBvbiBldmVyeSBmaWVsZCBhY3RpdmUgd2l0aCBwb3B1cCBvcGVuaW5nLlxuICogIC0gW0JyZWFrXSBjbGVhciBidXR0b24gcmV0dXJuIHRoZSBldmVudCB3aXRoIGBvbkNsaWNrYFxuICpcbiAqIC0gTG9jYWxlXG4gKiAgLSBSZW1vdmUgYGRhdGVGb3JtYXRgIHNpbmNlIGl0J3MgbmV2ZXIgdXNlZFxuICogIC0gUmVtb3ZlIGBkYXRlVGltZUZvcm1hdGAgc2luY2UgaXQncyBuZXZlciB1c2VkXG4gKlxuICogLSBQaWNrZXJcbiAqICAtIFRpbWVQaWNrZXIgc3VwcG9ydCBgY2hhbmdlT25TY3JvbGxgXG4gKiAgLSBUaW1lUGlja2VyIHN1cHBvcnQgYG1pbGxpc2Vjb25kYFxuICogIC0gU3VwcG9ydCBjZWxsTWVyaWRpZW1Gb3JtYXQgZm9yIEFNL1BNXG4gKiAgLSBHZXQgY29ycmVjdCBgZGlzYWJsZWRIb3Vyc2Agd2hlbiBzZXQgYHVzZTEySG91cnNgXG4gKiAgLSBTdXBwb3J0IGBzaG93V2Vla2BcbiAqXG4gKiAtIFJhbmdlUGlja2VyXG4gKiAgLSBbQnJlYWtdIFJhbmdlUGlja2VyIGlzIG5vdyBub3QgbGltaXQgdGhlIHJhbmdlIG9mIGNsaWNrZWQgZmllbGQuXG4gKiAgLSBUcmlnZ2VyIGBvbkNhbGVuZGFyQ2hhbmdlYCB3aGVuIHR5cGUgY29ycmVjdFxuICogIC0gW0JyZWFrXSBOb3Qgb3JkZXIgYHZhbHVlYCBpZiBnaXZlbiBgdmFsdWVgIGlzIHdyb25nIG9yZGVyLlxuICogIC0gSG92ZXIgYHByZXNldHNgIHdpbGwgc2hvdyBkYXRlIGluIGlucHV0IGZpZWxkLlxuICogIC0gW0JyZWFrXSBSYW5nZVBpY2tlciBnbyB0byBlbmQgZmllbGQsIGBwaWNrZXJWYWx1ZWAgd2lsbCBmb2xsb3cgdGhlIHN0YXJ0IGZpZWxkIGlmIG5vdCBjb250cm9sbGVkLlxuICovXG5cbmltcG9ydCBSYW5nZVBpY2tlciBmcm9tIFwiLi9QaWNrZXJJbnB1dC9SYW5nZVBpY2tlclwiO1xuaW1wb3J0IFBpY2tlciBmcm9tIFwiLi9QaWNrZXJJbnB1dC9TaW5nbGVQaWNrZXJcIjtcbmltcG9ydCBQaWNrZXJQYW5lbCBmcm9tIFwiLi9QaWNrZXJQYW5lbFwiO1xuZXhwb3J0IHsgUGlja2VyLCBSYW5nZVBpY2tlciwgUGlja2VyUGFuZWwgfTtcbmV4cG9ydCBkZWZhdWx0IFBpY2tlcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=