"use strict"; (self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-dropdown_es_index_js-node_modules_rc-field-form_es_index_js"],{ /***/ "../../../node_modules/rc-dropdown/es/Dropdown.js": /*!********************************************************!*\ !*** ../../../node_modules/rc-dropdown/es/Dropdown.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 _rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.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_es_ref__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.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_useAccessibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./hooks/useAccessibility */ "../../../node_modules/rc-dropdown/es/hooks/useAccessibility.js"); /* harmony import */ var _Overlay__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Overlay */ "../../../node_modules/rc-dropdown/es/Overlay.js"); /* harmony import */ var _placements__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./placements */ "../../../node_modules/rc-dropdown/es/placements.js"); var _excluded = ["arrow", "prefixCls", "transitionName", "animation", "align", "placement", "placements", "getPopupContainer", "showAction", "hideAction", "overlayClassName", "overlayStyle", "visible", "trigger", "autoFocus", "overlay", "children", "onVisibleChange"]; function Dropdown(props, ref) { var _children$props; var _props$arrow = props.arrow, arrow = _props$arrow === void 0 ? false : _props$arrow, _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? 'rc-dropdown' : _props$prefixCls, transitionName = props.transitionName, animation = props.animation, align = props.align, _props$placement = props.placement, placement = _props$placement === void 0 ? 'bottomLeft' : _props$placement, _props$placements = props.placements, placements = _props$placements === void 0 ? _placements__WEBPACK_IMPORTED_MODULE_10__["default"] : _props$placements, getPopupContainer = props.getPopupContainer, showAction = props.showAction, hideAction = props.hideAction, overlayClassName = props.overlayClassName, overlayStyle = props.overlayStyle, visible = props.visible, _props$trigger = props.trigger, trigger = _props$trigger === void 0 ? ['hover'] : _props$trigger, autoFocus = props.autoFocus, overlay = props.overlay, children = props.children, onVisibleChange = props.onVisibleChange, otherProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(props, _excluded); var _React$useState = react__WEBPACK_IMPORTED_MODULE_7___default().useState(), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2), triggerVisible = _React$useState2[0], setTriggerVisible = _React$useState2[1]; var mergedVisible = 'visible' in props ? visible : triggerVisible; var triggerRef = react__WEBPACK_IMPORTED_MODULE_7___default().useRef(null); var overlayRef = react__WEBPACK_IMPORTED_MODULE_7___default().useRef(null); var childRef = react__WEBPACK_IMPORTED_MODULE_7___default().useRef(null); react__WEBPACK_IMPORTED_MODULE_7___default().useImperativeHandle(ref, function () { return triggerRef.current; }); var handleVisibleChange = function handleVisibleChange(newVisible) { setTriggerVisible(newVisible); onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(newVisible); }; (0,_hooks_useAccessibility__WEBPACK_IMPORTED_MODULE_8__["default"])({ visible: mergedVisible, triggerRef: childRef, onVisibleChange: handleVisibleChange, autoFocus: autoFocus, overlayRef: overlayRef }); var onClick = function onClick(e) { var onOverlayClick = props.onOverlayClick; setTriggerVisible(false); if (onOverlayClick) { onOverlayClick(e); } }; var getMenuElement = function getMenuElement() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default().createElement(_Overlay__WEBPACK_IMPORTED_MODULE_9__["default"], { ref: overlayRef, overlay: overlay, prefixCls: prefixCls, arrow: arrow }); }; var getMenuElementOrLambda = function getMenuElementOrLambda() { if (typeof overlay === 'function') { return getMenuElement; } return getMenuElement(); }; var getMinOverlayWidthMatchTrigger = function getMinOverlayWidthMatchTrigger() { var minOverlayWidthMatchTrigger = props.minOverlayWidthMatchTrigger, alignPoint = props.alignPoint; if ('minOverlayWidthMatchTrigger' in props) { return minOverlayWidthMatchTrigger; } return !alignPoint; }; var getOpenClassName = function getOpenClassName() { var openClassName = props.openClassName; if (openClassName !== undefined) { return openClassName; } return "".concat(prefixCls, "-open"); }; var childrenNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default().cloneElement(children, { className: classnames__WEBPACK_IMPORTED_MODULE_5___default()((_children$props = children.props) === null || _children$props === void 0 ? void 0 : _children$props.className, mergedVisible && getOpenClassName()), ref: (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.supportRef)(children) ? (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.composeRef)(childRef, (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.getNodeRef)(children)) : undefined }); var triggerHideAction = hideAction; if (!triggerHideAction && trigger.indexOf('contextMenu') !== -1) { triggerHideAction = ['click']; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default().createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_4__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ builtinPlacements: placements }, otherProps, { prefixCls: prefixCls, ref: triggerRef, popupClassName: classnames__WEBPACK_IMPORTED_MODULE_5___default()(overlayClassName, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-show-arrow"), arrow)), popupStyle: overlayStyle, action: trigger, showAction: showAction, hideAction: triggerHideAction, popupPlacement: placement, popupAlign: align, popupTransitionName: transitionName, popupAnimation: animation, popupVisible: mergedVisible, stretch: getMinOverlayWidthMatchTrigger() ? 'minWidth' : '', popup: getMenuElementOrLambda(), onPopupVisibleChange: handleVisibleChange, onPopupClick: onClick, getPopupContainer: getPopupContainer }), childrenNode); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7___default().forwardRef(Dropdown)); /***/ }), /***/ "../../../node_modules/rc-dropdown/es/Overlay.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-dropdown/es/Overlay.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 rc_util_es_ref__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/ref */ "../../../node_modules/rc-util/es/ref.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__); var Overlay = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(function (props, ref) { var overlay = props.overlay, arrow = props.arrow, prefixCls = props.prefixCls; var overlayNode = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(function () { var overlayElement; if (typeof overlay === 'function') { overlayElement = overlay(); } else { overlayElement = overlay; } return overlayElement; }, [overlay]); var composedRef = (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_0__.composeRef)(ref, (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_0__.getNodeRef)(overlayNode)); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement((react__WEBPACK_IMPORTED_MODULE_1___default().Fragment), null, arrow && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "".concat(prefixCls, "-arrow") }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().cloneElement(overlayNode, { ref: (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_0__.supportRef)(overlayNode) ? composedRef : undefined })); }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Overlay); /***/ }), /***/ "../../../node_modules/rc-dropdown/es/hooks/useAccessibility.js": /*!**********************************************************************!*\ !*** ../../../node_modules/rc-dropdown/es/hooks/useAccessibility.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useAccessibility) /* harmony export */ }); /* harmony import */ var rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/KeyCode */ "../../../node_modules/rc-util/es/KeyCode.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__); var ESC = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_0__["default"].ESC, TAB = rc_util_es_KeyCode__WEBPACK_IMPORTED_MODULE_0__["default"].TAB; function useAccessibility(_ref) { var visible = _ref.visible, triggerRef = _ref.triggerRef, onVisibleChange = _ref.onVisibleChange, autoFocus = _ref.autoFocus, overlayRef = _ref.overlayRef; var focusMenuRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(false); var handleCloseMenuAndReturnFocus = function handleCloseMenuAndReturnFocus() { if (visible) { var _triggerRef$current, _triggerRef$current$f; (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 || (_triggerRef$current$f = _triggerRef$current.focus) === null || _triggerRef$current$f === void 0 || _triggerRef$current$f.call(_triggerRef$current); onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(false); } }; var focusMenu = function focusMenu() { var _overlayRef$current; if ((_overlayRef$current = overlayRef.current) !== null && _overlayRef$current !== void 0 && _overlayRef$current.focus) { overlayRef.current.focus(); focusMenuRef.current = true; return true; } return false; }; var handleKeyDown = function handleKeyDown(event) { switch (event.keyCode) { case ESC: handleCloseMenuAndReturnFocus(); break; case TAB: { var focusResult = false; if (!focusMenuRef.current) { focusResult = focusMenu(); } if (focusResult) { event.preventDefault(); } else { handleCloseMenuAndReturnFocus(); } break; } } }; react__WEBPACK_IMPORTED_MODULE_2__.useEffect(function () { if (visible) { window.addEventListener("keydown", handleKeyDown); if (autoFocus) { // FIXME: hack with raf (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(focusMenu, 3); } return function () { window.removeEventListener("keydown", handleKeyDown); focusMenuRef.current = false; }; } return function () { focusMenuRef.current = false; }; }, [visible]); // eslint-disable-line react-hooks/exhaustive-deps } /***/ }), /***/ "../../../node_modules/rc-dropdown/es/index.js": /*!*****************************************************!*\ !*** ../../../node_modules/rc-dropdown/es/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 _Dropdown__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Dropdown */ "../../../node_modules/rc-dropdown/es/Dropdown.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Dropdown__WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "../../../node_modules/rc-dropdown/es/placements.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-dropdown/es/placements.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 */ }); var autoAdjustOverflow = { adjustX: 1, adjustY: 1 }; var targetOffset = [0, 0]; var placements = { topLeft: { points: ['bl', 'tl'], overflow: autoAdjustOverflow, offset: [0, -4], targetOffset: targetOffset }, top: { points: ['bc', 'tc'], overflow: autoAdjustOverflow, offset: [0, -4], targetOffset: targetOffset }, topRight: { points: ['br', 'tr'], overflow: autoAdjustOverflow, offset: [0, -4], targetOffset: targetOffset }, bottomLeft: { points: ['tl', 'bl'], overflow: autoAdjustOverflow, offset: [0, 4], targetOffset: targetOffset }, bottom: { points: ['tc', 'bc'], overflow: autoAdjustOverflow, offset: [0, 4], targetOffset: targetOffset }, bottomRight: { points: ['tr', 'br'], overflow: autoAdjustOverflow, offset: [0, 4], targetOffset: targetOffset } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (placements); /***/ }), /***/ "../../../node_modules/rc-field-form/es/Field.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-field-form/es/Field.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_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js"); /* harmony import */ var _babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/regeneratorRuntime */ "../../../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js"); /* harmony import */ var _babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/asyncToGenerator */ "../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__ = __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_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_6__ = __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_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js"); /* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ "../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js"); /* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js"); /* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "../../../node_modules/@babel/runtime/helpers/esm/createSuper.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "../../../node_modules/rc-util/es/Children/toArray.js"); /* harmony import */ var rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rc-util/es/isEqual */ "../../../node_modules/rc-util/es/isEqual.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_15__); /* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./FieldContext */ "../../../node_modules/rc-field-form/es/FieldContext.js"); /* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ListContext */ "../../../node_modules/rc-field-form/es/ListContext.js"); /* harmony import */ var _utils_typeUtil__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/typeUtil */ "../../../node_modules/rc-field-form/es/utils/typeUtil.js"); /* harmony import */ var _utils_validateUtil__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils/validateUtil */ "../../../node_modules/rc-field-form/es/utils/validateUtil.js"); /* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./utils/valueUtil */ "../../../node_modules/rc-field-form/es/utils/valueUtil.js"); var _excluded = ["name"]; var EMPTY_ERRORS = []; function requireUpdate(shouldUpdate, prev, next, prevValue, nextValue, info) { if (typeof shouldUpdate === 'function') { return shouldUpdate(prev, next, 'source' in info ? { source: info.source } : {}); } return prevValue !== nextValue; } // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style // We use Class instead of Hooks here since it will cost much code by using Hooks. var Field = /*#__PURE__*/function (_React$Component) { (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_9__["default"])(Field, _React$Component); var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_10__["default"])(Field); // ============================== Subscriptions ============================== function Field(props) { var _this; (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_6__["default"])(this, Field); _this = _super.call(this, props); // Register on init (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "state", { resetCount: 0 }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "cancelRegisterFunc", null); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "mounted", false); /** * Follow state should not management in State since it will async update by React. * This makes first render of form can not get correct state value. */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "touched", false); /** * Mark when touched & validated. Currently only used for `dependencies`. * Note that we do not think field with `initialValue` is dirty * but this will be by `isFieldDirty` func. */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "dirty", false); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "validatePromise", void 0); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "prevValidating", void 0); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "errors", EMPTY_ERRORS); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "warnings", EMPTY_ERRORS); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "cancelRegister", function () { var _this$props = _this.props, preserve = _this$props.preserve, isListField = _this$props.isListField, name = _this$props.name; if (_this.cancelRegisterFunc) { _this.cancelRegisterFunc(isListField, preserve, (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.getNamePath)(name)); } _this.cancelRegisterFunc = null; }); // ================================== Utils ================================== (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getNamePath", function () { var _this$props2 = _this.props, name = _this$props2.name, fieldContext = _this$props2.fieldContext; var _fieldContext$prefixN = fieldContext.prefixName, prefixName = _fieldContext$prefixN === void 0 ? [] : _fieldContext$prefixN; return name !== undefined ? [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__["default"])(prefixName), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__["default"])(name)) : []; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getRules", function () { var _this$props3 = _this.props, _this$props3$rules = _this$props3.rules, rules = _this$props3$rules === void 0 ? [] : _this$props3$rules, fieldContext = _this$props3.fieldContext; return rules.map(function (rule) { if (typeof rule === 'function') { return rule(fieldContext); } return rule; }); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "refresh", function () { if (!_this.mounted) return; /** * Clean up current node. */ _this.setState(function (_ref) { var resetCount = _ref.resetCount; return { resetCount: resetCount + 1 }; }); }); // Event should only trigger when meta changed (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "metaCache", null); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "triggerMetaEvent", function (destroy) { var onMetaChange = _this.props.onMetaChange; if (onMetaChange) { var _meta = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__["default"])({}, _this.getMeta()), {}, { destroy: destroy }); if (!(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_13__["default"])(_this.metaCache, _meta)) { onMetaChange(_meta); } _this.metaCache = _meta; } else { _this.metaCache = null; } }); // ========================= Field Entity Interfaces ========================= // Trigger by store update. Check if need update the component (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "onStoreChange", function (prevStore, namePathList, info) { var _this$props4 = _this.props, shouldUpdate = _this$props4.shouldUpdate, _this$props4$dependen = _this$props4.dependencies, dependencies = _this$props4$dependen === void 0 ? [] : _this$props4$dependen, onReset = _this$props4.onReset; var store = info.store; var namePath = _this.getNamePath(); var prevValue = _this.getValue(prevStore); var curValue = _this.getValue(store); var namePathMatch = namePathList && (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.containsNamePath)(namePathList, namePath); // `setFieldsValue` is a quick access to update related status if (info.type === 'valueUpdate' && info.source === 'external' && !(0,rc_util_es_isEqual__WEBPACK_IMPORTED_MODULE_13__["default"])(prevValue, curValue)) { _this.touched = true; _this.dirty = true; _this.validatePromise = null; _this.errors = EMPTY_ERRORS; _this.warnings = EMPTY_ERRORS; _this.triggerMetaEvent(); } switch (info.type) { case 'reset': if (!namePathList || namePathMatch) { // Clean up state _this.touched = false; _this.dirty = false; _this.validatePromise = undefined; _this.errors = EMPTY_ERRORS; _this.warnings = EMPTY_ERRORS; _this.triggerMetaEvent(); onReset === null || onReset === void 0 || onReset(); _this.refresh(); return; } break; /** * In case field with `preserve = false` nest deps like: * - A = 1 => show B * - B = 1 => show C * - Reset A, need clean B, C */ case 'remove': { if (shouldUpdate && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) { _this.reRender(); return; } break; } case 'setField': { var data = info.data; if (namePathMatch) { if ('touched' in data) { _this.touched = data.touched; } if ('validating' in data && !('originRCField' in data)) { _this.validatePromise = data.validating ? Promise.resolve([]) : null; } if ('errors' in data) { _this.errors = data.errors || EMPTY_ERRORS; } if ('warnings' in data) { _this.warnings = data.warnings || EMPTY_ERRORS; } _this.dirty = true; _this.triggerMetaEvent(); _this.reRender(); return; } else if ('value' in data && (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.containsNamePath)(namePathList, namePath, true)) { // Contains path with value should also check _this.reRender(); return; } // Handle update by `setField` with `shouldUpdate` if (shouldUpdate && !namePath.length && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) { _this.reRender(); return; } break; } case 'dependenciesUpdate': { /** * Trigger when marked `dependencies` updated. Related fields will all update */ var dependencyList = dependencies.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.getNamePath); // No need for `namePathMath` check and `shouldUpdate` check, since `valueUpdate` will be // emitted earlier and they will work there // If set it may cause unnecessary twice rerendering if (dependencyList.some(function (dependency) { return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.containsNamePath)(info.relatedFields, dependency); })) { _this.reRender(); return; } break; } default: // 1. If `namePath` exists in `namePathList`, means it's related value and should update // For example // If `namePathList` is [['list']] (List value update), Field should be updated // If `namePathList` is [['list', 0]] (Field value update), List shouldn't be updated // 2. // 2.1 If `dependencies` is set, `name` is not set and `shouldUpdate` is not set, // don't use `shouldUpdate`. `dependencies` is view as a shortcut if `shouldUpdate` // is not provided // 2.2 If `shouldUpdate` provided, use customize logic to update the field // else to check if value changed if (namePathMatch || (!dependencies.length || namePath.length || shouldUpdate) && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) { _this.reRender(); return; } break; } if (shouldUpdate === true) { _this.reRender(); } }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "validateRules", function (options) { // We should fixed namePath & value to avoid developer change then by form function var namePath = _this.getNamePath(); var currentValue = _this.getValue(); var _ref2 = options || {}, triggerName = _ref2.triggerName, _ref2$validateOnly = _ref2.validateOnly, validateOnly = _ref2$validateOnly === void 0 ? false : _ref2$validateOnly; // Force change to async to avoid rule OOD under renderProps field var rootPromise = Promise.resolve().then( /*#__PURE__*/(0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee() { var _this$props5, _this$props5$validate, validateFirst, messageVariables, validateDebounce, filteredRules, promise; return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (_this.mounted) { _context.next = 2; break; } return _context.abrupt("return", []); case 2: _this$props5 = _this.props, _this$props5$validate = _this$props5.validateFirst, validateFirst = _this$props5$validate === void 0 ? false : _this$props5$validate, messageVariables = _this$props5.messageVariables, validateDebounce = _this$props5.validateDebounce; // Start validate filteredRules = _this.getRules(); if (triggerName) { filteredRules = filteredRules.filter(function (rule) { return rule; }).filter(function (rule) { var validateTrigger = rule.validateTrigger; if (!validateTrigger) { return true; } var triggerList = (0,_utils_typeUtil__WEBPACK_IMPORTED_MODULE_18__.toArray)(validateTrigger); return triggerList.includes(triggerName); }); } // Wait for debounce. Skip if no `triggerName` since its from `validateFields / submit` if (!(validateDebounce && triggerName)) { _context.next = 10; break; } _context.next = 8; return new Promise(function (resolve) { setTimeout(resolve, validateDebounce); }); case 8: if (!(_this.validatePromise !== rootPromise)) { _context.next = 10; break; } return _context.abrupt("return", []); case 10: promise = (0,_utils_validateUtil__WEBPACK_IMPORTED_MODULE_19__.validateRules)(namePath, currentValue, filteredRules, options, validateFirst, messageVariables); promise.catch(function (e) { return e; }).then(function () { var ruleErrors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_ERRORS; if (_this.validatePromise === rootPromise) { var _ruleErrors$forEach; _this.validatePromise = null; // Get errors & warnings var nextErrors = []; var nextWarnings = []; (_ruleErrors$forEach = ruleErrors.forEach) === null || _ruleErrors$forEach === void 0 || _ruleErrors$forEach.call(ruleErrors, function (_ref4) { var warningOnly = _ref4.rule.warningOnly, _ref4$errors = _ref4.errors, errors = _ref4$errors === void 0 ? EMPTY_ERRORS : _ref4$errors; if (warningOnly) { nextWarnings.push.apply(nextWarnings, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__["default"])(errors)); } else { nextErrors.push.apply(nextErrors, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__["default"])(errors)); } }); _this.errors = nextErrors; _this.warnings = nextWarnings; _this.triggerMetaEvent(); _this.reRender(); } }); return _context.abrupt("return", promise); case 13: case "end": return _context.stop(); } }, _callee); }))); if (validateOnly) { return rootPromise; } _this.validatePromise = rootPromise; _this.dirty = true; _this.errors = EMPTY_ERRORS; _this.warnings = EMPTY_ERRORS; _this.triggerMetaEvent(); // Force trigger re-render since we need sync renderProps with new meta _this.reRender(); return rootPromise; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "isFieldValidating", function () { return !!_this.validatePromise; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "isFieldTouched", function () { return _this.touched; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "isFieldDirty", function () { // Touched or validate or has initialValue if (_this.dirty || _this.props.initialValue !== undefined) { return true; } // Form set initialValue var fieldContext = _this.props.fieldContext; var _fieldContext$getInte = fieldContext.getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_16__.HOOK_MARK), getInitialValue = _fieldContext$getInte.getInitialValue; if (getInitialValue(_this.getNamePath()) !== undefined) { return true; } return false; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getErrors", function () { return _this.errors; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getWarnings", function () { return _this.warnings; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "isListField", function () { return _this.props.isListField; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "isList", function () { return _this.props.isList; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "isPreserve", function () { return _this.props.preserve; }); // ============================= Child Component ============================= (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getMeta", function () { // Make error & validating in cache to save perf _this.prevValidating = _this.isFieldValidating(); var meta = { touched: _this.isFieldTouched(), validating: _this.prevValidating, errors: _this.errors, warnings: _this.warnings, name: _this.getNamePath(), validated: _this.validatePromise === null }; return meta; }); // Only return validate child node. If invalidate, will do nothing about field. (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getOnlyChild", function (children) { // Support render props if (typeof children === 'function') { var _meta2 = _this.getMeta(); return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__["default"])({}, _this.getOnlyChild(children(_this.getControlled(), _meta2, _this.props.fieldContext))), {}, { isFunction: true }); } // Filed element only var childList = (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_12__["default"])(children); if (childList.length !== 1 || ! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.isValidElement(childList[0])) { return { child: childList, isFunction: false }; } return { child: childList[0], isFunction: false }; }); // ============================== Field Control ============================== (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getValue", function (store) { var getFieldsValue = _this.props.fieldContext.getFieldsValue; var namePath = _this.getNamePath(); return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.getValue)(store || getFieldsValue(true), namePath); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this), "getControlled", function () { var childProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _this$props6 = _this.props, name = _this$props6.name, trigger = _this$props6.trigger, validateTrigger = _this$props6.validateTrigger, getValueFromEvent = _this$props6.getValueFromEvent, normalize = _this$props6.normalize, valuePropName = _this$props6.valuePropName, getValueProps = _this$props6.getValueProps, fieldContext = _this$props6.fieldContext; var mergedValidateTrigger = validateTrigger !== undefined ? validateTrigger : fieldContext.validateTrigger; var namePath = _this.getNamePath(); var getInternalHooks = fieldContext.getInternalHooks, getFieldsValue = fieldContext.getFieldsValue; var _getInternalHooks = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_16__.HOOK_MARK), dispatch = _getInternalHooks.dispatch; var value = _this.getValue(); var mergedGetValueProps = getValueProps || function (val) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])({}, valuePropName, val); }; var originTriggerFunc = childProps[trigger]; var valueProps = name !== undefined ? mergedGetValueProps(value) : {}; // warning when prop value is function if ( true && valueProps) { Object.keys(valueProps).forEach(function (key) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(typeof valueProps[key] !== 'function', "It's not recommended to generate dynamic function prop by `getValueProps`. Please pass it to child component directly (prop: ".concat(key, ")")); }); } var control = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_4__["default"])({}, childProps), valueProps); // Add trigger control[trigger] = function () { // Mark as touched _this.touched = true; _this.dirty = true; _this.triggerMetaEvent(); var newValue; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (getValueFromEvent) { newValue = getValueFromEvent.apply(void 0, args); } else { newValue = _utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.defaultGetValueFromEvent.apply(void 0, [valuePropName].concat(args)); } if (normalize) { newValue = normalize(newValue, value, getFieldsValue(true)); } if (newValue !== value) { dispatch({ type: 'updateValue', namePath: namePath, value: newValue }); } if (originTriggerFunc) { originTriggerFunc.apply(void 0, args); } }; // Add validateTrigger var validateTriggerList = (0,_utils_typeUtil__WEBPACK_IMPORTED_MODULE_18__.toArray)(mergedValidateTrigger || []); validateTriggerList.forEach(function (triggerName) { // Wrap additional function of component, so that we can get latest value from store var originTrigger = control[triggerName]; control[triggerName] = function () { if (originTrigger) { originTrigger.apply(void 0, arguments); } // Always use latest rules var rules = _this.props.rules; if (rules && rules.length) { // We dispatch validate to root, // since it will update related data with other field with same name dispatch({ type: 'validateField', namePath: namePath, triggerName: triggerName }); } }; }); return control; }); if (props.fieldContext) { var getInternalHooks = props.fieldContext.getInternalHooks; var _getInternalHooks2 = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_16__.HOOK_MARK), initEntityValue = _getInternalHooks2.initEntityValue; initEntityValue((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_8__["default"])(_this)); } return _this; } (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_7__["default"])(Field, [{ key: "componentDidMount", value: function componentDidMount() { var _this$props7 = this.props, shouldUpdate = _this$props7.shouldUpdate, fieldContext = _this$props7.fieldContext; this.mounted = true; // Register on init if (fieldContext) { var getInternalHooks = fieldContext.getInternalHooks; var _getInternalHooks3 = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_16__.HOOK_MARK), registerField = _getInternalHooks3.registerField; this.cancelRegisterFunc = registerField(this); } // One more render for component in case fields not ready if (shouldUpdate === true) { this.reRender(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.cancelRegister(); this.triggerMetaEvent(true); this.mounted = false; } }, { key: "reRender", value: function reRender() { if (!this.mounted) return; this.forceUpdate(); } }, { key: "render", value: function render() { var resetCount = this.state.resetCount; var children = this.props.children; var _this$getOnlyChild = this.getOnlyChild(children), child = _this$getOnlyChild.child, isFunction = _this$getOnlyChild.isFunction; // Not need to `cloneElement` since user can handle this in render function self var returnChildNode; if (isFunction) { returnChildNode = child; } else if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.isValidElement(child)) { returnChildNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.cloneElement(child, this.getControlled(child.props)); } else { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(!child, '`children` of Field is not validate ReactElement.'); returnChildNode = child; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(react__WEBPACK_IMPORTED_MODULE_15__.Fragment, { key: resetCount }, returnChildNode); } }]); return Field; }(react__WEBPACK_IMPORTED_MODULE_15__.Component); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])(Field, "contextType", _FieldContext__WEBPACK_IMPORTED_MODULE_16__["default"]); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_11__["default"])(Field, "defaultProps", { trigger: 'onChange', valuePropName: 'value' }); function WrapperField(_ref6) { var _restProps$isListFiel; var name = _ref6.name, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref6, _excluded); var fieldContext = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_FieldContext__WEBPACK_IMPORTED_MODULE_16__["default"]); var listContext = react__WEBPACK_IMPORTED_MODULE_15__.useContext(_ListContext__WEBPACK_IMPORTED_MODULE_17__["default"]); var namePath = name !== undefined ? (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_20__.getNamePath)(name) : undefined; var isMergedListField = (_restProps$isListFiel = restProps.isListField) !== null && _restProps$isListFiel !== void 0 ? _restProps$isListFiel : !!listContext; var key = 'keep'; if (!isMergedListField) { key = "_".concat((namePath || []).join('_')); } // Warning if it's a directly list field. // We can still support multiple level field preserve. if ( true && restProps.preserve === false && isMergedListField && namePath.length <= 1) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_14__["default"])(false, '`preserve` should not apply on Form.List fields.'); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_15__.createElement(Field, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ key: key, name: namePath, isListField: isMergedListField }, restProps, { fieldContext: fieldContext })); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WrapperField); /***/ }), /***/ "../../../node_modules/rc-field-form/es/FieldContext.js": /*!**************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/FieldContext.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HOOK_MARK: () => (/* binding */ HOOK_MARK), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.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__); var HOOK_MARK = 'RC_FORM_INTERNAL_HOOKS'; // eslint-disable-next-line @typescript-eslint/no-explicit-any var warningFunc = function warningFunc() { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_0__["default"])(false, 'Can not find FormContext. Please make sure you wrap Field under Form.'); }; var Context = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({ getFieldValue: warningFunc, getFieldsValue: warningFunc, getFieldError: warningFunc, getFieldWarning: warningFunc, getFieldsError: warningFunc, isFieldsTouched: warningFunc, isFieldTouched: warningFunc, isFieldValidating: warningFunc, isFieldsValidating: warningFunc, resetFields: warningFunc, setFields: warningFunc, setFieldValue: warningFunc, setFieldsValue: warningFunc, validateFields: warningFunc, submit: warningFunc, getInternalHooks: function getInternalHooks() { warningFunc(); return { dispatch: warningFunc, initEntityValue: warningFunc, registerField: warningFunc, useSubscribe: warningFunc, setInitialValues: warningFunc, destroyForm: warningFunc, setCallbacks: warningFunc, registerWatch: warningFunc, getFields: warningFunc, setValidateMessages: warningFunc, setPreserve: warningFunc, getInitialValue: warningFunc }; } }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Context); /***/ }), /***/ "../../../node_modules/rc-field-form/es/Form.js": /*!******************************************************!*\ !*** ../../../node_modules/rc-field-form/es/Form.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_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 _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 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 _useForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useForm */ "../../../node_modules/rc-field-form/es/useForm.js"); /* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FieldContext */ "../../../node_modules/rc-field-form/es/FieldContext.js"); /* harmony import */ var _FormContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./FormContext */ "../../../node_modules/rc-field-form/es/FormContext.js"); /* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/valueUtil */ "../../../node_modules/rc-field-form/es/utils/valueUtil.js"); /* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ListContext */ "../../../node_modules/rc-field-form/es/ListContext.js"); var _excluded = ["name", "initialValues", "fields", "form", "preserve", "children", "component", "validateMessages", "validateTrigger", "onValuesChange", "onFieldsChange", "onFinish", "onFinishFailed", "clearOnDestroy"]; var Form = function Form(_ref, ref) { var name = _ref.name, initialValues = _ref.initialValues, fields = _ref.fields, form = _ref.form, preserve = _ref.preserve, children = _ref.children, _ref$component = _ref.component, Component = _ref$component === void 0 ? 'form' : _ref$component, validateMessages = _ref.validateMessages, _ref$validateTrigger = _ref.validateTrigger, validateTrigger = _ref$validateTrigger === void 0 ? 'onChange' : _ref$validateTrigger, onValuesChange = _ref.onValuesChange, _onFieldsChange = _ref.onFieldsChange, _onFinish = _ref.onFinish, onFinishFailed = _ref.onFinishFailed, clearOnDestroy = _ref.clearOnDestroy, restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref, _excluded); var nativeElementRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(null); var formContext = react__WEBPACK_IMPORTED_MODULE_4__.useContext(_FormContext__WEBPACK_IMPORTED_MODULE_7__["default"]); // We customize handle event since Context will makes all the consumer re-render: // https://reactjs.org/docs/context.html#contextprovider var _useForm = (0,_useForm__WEBPACK_IMPORTED_MODULE_5__["default"])(form), _useForm2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useForm, 1), formInstance = _useForm2[0]; var _getInternalHooks = formInstance.getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_6__.HOOK_MARK), useSubscribe = _getInternalHooks.useSubscribe, setInitialValues = _getInternalHooks.setInitialValues, setCallbacks = _getInternalHooks.setCallbacks, setValidateMessages = _getInternalHooks.setValidateMessages, setPreserve = _getInternalHooks.setPreserve, destroyForm = _getInternalHooks.destroyForm; // Pass ref with form instance react__WEBPACK_IMPORTED_MODULE_4__.useImperativeHandle(ref, function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formInstance), {}, { nativeElement: nativeElementRef.current }); }); // Register form into Context react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () { formContext.registerForm(name, formInstance); return function () { formContext.unregisterForm(name); }; }, [formContext, formInstance, name]); // Pass props to store setValidateMessages((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formContext.validateMessages), validateMessages)); setCallbacks({ onValuesChange: onValuesChange, onFieldsChange: function onFieldsChange(changedFields) { formContext.triggerFormChange(name, changedFields); if (_onFieldsChange) { for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { rest[_key - 1] = arguments[_key]; } _onFieldsChange.apply(void 0, [changedFields].concat(rest)); } }, onFinish: function onFinish(values) { formContext.triggerFormFinish(name, values); if (_onFinish) { _onFinish(values); } }, onFinishFailed: onFinishFailed }); setPreserve(preserve); // Set initial value, init store value when first mount var mountRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(null); setInitialValues(initialValues, !mountRef.current); if (!mountRef.current) { mountRef.current = true; } react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () { return function () { return destroyForm(clearOnDestroy); }; }, // eslint-disable-next-line react-hooks/exhaustive-deps []); // Prepare children by `children` type var childrenNode; var childrenRenderProps = typeof children === 'function'; if (childrenRenderProps) { var _values = formInstance.getFieldsValue(true); childrenNode = children(_values, formInstance); } else { childrenNode = children; } // Not use subscribe when using render props useSubscribe(!childrenRenderProps); // Listen if fields provided. We use ref to save prev data here to avoid additional render var prevFieldsRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(); react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () { if (!(0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_8__.isSimilar)(prevFieldsRef.current || [], fields || [])) { formInstance.setFields(fields || []); } prevFieldsRef.current = fields; }, [fields, formInstance]); var formContextValue = react__WEBPACK_IMPORTED_MODULE_4__.useMemo(function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formInstance), {}, { validateTrigger: validateTrigger }); }, [formInstance, validateTrigger]); var wrapperNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_ListContext__WEBPACK_IMPORTED_MODULE_9__["default"].Provider, { value: null }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_FieldContext__WEBPACK_IMPORTED_MODULE_6__["default"].Provider, { value: formContextValue }, childrenNode)); if (Component === false) { return wrapperNode; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restProps, { ref: nativeElementRef, onSubmit: function onSubmit(event) { event.preventDefault(); event.stopPropagation(); formInstance.submit(); }, onReset: function onReset(event) { var _restProps$onReset; event.preventDefault(); formInstance.resetFields(); (_restProps$onReset = restProps.onReset) === null || _restProps$onReset === void 0 || _restProps$onReset.call(restProps, event); } }), wrapperNode); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Form); /***/ }), /***/ "../../../node_modules/rc-field-form/es/FormContext.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/FormContext.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FormProvider: () => (/* binding */ FormProvider), /* 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_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__); var FormContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createContext({ triggerFormChange: function triggerFormChange() {}, triggerFormFinish: function triggerFormFinish() {}, registerForm: function registerForm() {}, unregisterForm: function unregisterForm() {} }); var FormProvider = function FormProvider(_ref) { var validateMessages = _ref.validateMessages, onFormChange = _ref.onFormChange, onFormFinish = _ref.onFormFinish, children = _ref.children; var formContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(FormContext); var formsRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef({}); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(FormContext.Provider, { value: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formContext), {}, { validateMessages: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formContext.validateMessages), validateMessages), // ========================================================= // = Global Form Control = // ========================================================= triggerFormChange: function triggerFormChange(name, changedFields) { if (onFormChange) { onFormChange(name, { changedFields: changedFields, forms: formsRef.current }); } formContext.triggerFormChange(name, changedFields); }, triggerFormFinish: function triggerFormFinish(name, values) { if (onFormFinish) { onFormFinish(name, { values: values, forms: formsRef.current }); } formContext.triggerFormFinish(name, values); }, registerForm: function registerForm(name, form) { if (name) { formsRef.current = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formsRef.current), {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, name, form)); } formContext.registerForm(name, form); }, unregisterForm: function unregisterForm(name) { var newForms = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formsRef.current); delete newForms[name]; formsRef.current = newForms; formContext.unregisterForm(name); } }) }, children); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FormContext); /***/ }), /***/ "../../../node_modules/rc-field-form/es/List.js": /*!******************************************************!*\ !*** ../../../node_modules/rc-field-form/es/List.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_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_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.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 rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FieldContext */ "../../../node_modules/rc-field-form/es/FieldContext.js"); /* harmony import */ var _Field__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Field */ "../../../node_modules/rc-field-form/es/Field.js"); /* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/valueUtil */ "../../../node_modules/rc-field-form/es/utils/valueUtil.js"); /* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ListContext */ "../../../node_modules/rc-field-form/es/ListContext.js"); function List(_ref) { var name = _ref.name, initialValue = _ref.initialValue, children = _ref.children, rules = _ref.rules, validateTrigger = _ref.validateTrigger, isListField = _ref.isListField; var context = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_FieldContext__WEBPACK_IMPORTED_MODULE_4__["default"]); var wrapperListContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_ListContext__WEBPACK_IMPORTED_MODULE_7__["default"]); var keyRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef({ keys: [], id: 0 }); var keyManager = keyRef.current; var prefixName = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { var parentPrefixName = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.getNamePath)(context.prefixName) || []; return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(parentPrefixName), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.getNamePath)(name))); }, [context.prefixName, name]); var fieldContext = react__WEBPACK_IMPORTED_MODULE_2__.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"])({}, context), {}, { prefixName: prefixName }); }, [context, prefixName]); // List context var listContext = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return { getKey: function getKey(namePath) { var len = prefixName.length; var pathName = namePath[len]; return [keyManager.keys[pathName], namePath.slice(len + 1)]; } }; }, [prefixName]); // User should not pass `children` as other type. if (typeof children !== 'function') { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(false, 'Form.List only accepts function as children.'); return null; } var shouldUpdate = function shouldUpdate(prevValue, nextValue, _ref2) { var source = _ref2.source; if (source === 'internal') { return false; } return prevValue !== nextValue; }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_ListContext__WEBPACK_IMPORTED_MODULE_7__["default"].Provider, { value: listContext }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_FieldContext__WEBPACK_IMPORTED_MODULE_4__["default"].Provider, { value: fieldContext }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_Field__WEBPACK_IMPORTED_MODULE_5__["default"], { name: [], shouldUpdate: shouldUpdate, rules: rules, validateTrigger: validateTrigger, initialValue: initialValue, isList: true, isListField: isListField !== null && isListField !== void 0 ? isListField : !!wrapperListContext }, function (_ref3, meta) { var _ref3$value = _ref3.value, value = _ref3$value === void 0 ? [] : _ref3$value, onChange = _ref3.onChange; var getFieldValue = context.getFieldValue; var getNewValue = function getNewValue() { var values = getFieldValue(prefixName || []); return values || []; }; /** * Always get latest value in case user update fields by `form` api. */ var operations = { add: function add(defaultValue, index) { // Mapping keys var newValue = getNewValue(); if (index >= 0 && index <= newValue.length) { keyManager.keys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keyManager.keys.slice(0, index)), [keyManager.id], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keyManager.keys.slice(index))); onChange([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(newValue.slice(0, index)), [defaultValue], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(newValue.slice(index)))); } else { if ( true && (index < 0 || index > newValue.length)) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(false, 'The second parameter of the add function should be a valid positive number.'); } keyManager.keys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keyManager.keys), [keyManager.id]); onChange([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(newValue), [defaultValue])); } keyManager.id += 1; }, remove: function remove(index) { var newValue = getNewValue(); var indexSet = new Set(Array.isArray(index) ? index : [index]); if (indexSet.size <= 0) { return; } keyManager.keys = keyManager.keys.filter(function (_, keysIndex) { return !indexSet.has(keysIndex); }); // Trigger store change onChange(newValue.filter(function (_, valueIndex) { return !indexSet.has(valueIndex); })); }, move: function move(from, to) { if (from === to) { return; } var newValue = getNewValue(); // Do not handle out of range if (from < 0 || from >= newValue.length || to < 0 || to >= newValue.length) { return; } keyManager.keys = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.move)(keyManager.keys, from, to); // Trigger store change onChange((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.move)(newValue, from, to)); } }; var listValue = value || []; if (!Array.isArray(listValue)) { listValue = []; if (true) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(false, "Current value of '".concat(prefixName.join(' > '), "' is not an array type.")); } } return children(listValue.map(function (__, index) { var key = keyManager.keys[index]; if (key === undefined) { keyManager.keys[index] = keyManager.id; key = keyManager.keys[index]; keyManager.id += 1; } return { name: index, key: key, isListField: true }; }), operations, meta); }))); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (List); /***/ }), /***/ "../../../node_modules/rc-field-form/es/ListContext.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/ListContext.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 ListContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ListContext); /***/ }), /***/ "../../../node_modules/rc-field-form/es/index.js": /*!*******************************************************!*\ !*** ../../../node_modules/rc-field-form/es/index.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Field: () => (/* reexport safe */ _Field__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ FieldContext: () => (/* reexport safe */ _FieldContext__WEBPACK_IMPORTED_MODULE_6__["default"]), /* harmony export */ FormProvider: () => (/* reexport safe */ _FormContext__WEBPACK_IMPORTED_MODULE_5__.FormProvider), /* harmony export */ List: () => (/* reexport safe */ _List__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ ListContext: () => (/* reexport safe */ _ListContext__WEBPACK_IMPORTED_MODULE_7__["default"]), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ useForm: () => (/* reexport safe */ _useForm__WEBPACK_IMPORTED_MODULE_3__["default"]), /* harmony export */ useWatch: () => (/* reexport safe */ _useWatch__WEBPACK_IMPORTED_MODULE_8__["default"]) /* 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 _Field__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Field */ "../../../node_modules/rc-field-form/es/Field.js"); /* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./List */ "../../../node_modules/rc-field-form/es/List.js"); /* harmony import */ var _useForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useForm */ "../../../node_modules/rc-field-form/es/useForm.js"); /* harmony import */ var _Form__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Form */ "../../../node_modules/rc-field-form/es/Form.js"); /* harmony import */ var _FormContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FormContext */ "../../../node_modules/rc-field-form/es/FormContext.js"); /* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FieldContext */ "../../../node_modules/rc-field-form/es/FieldContext.js"); /* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ListContext */ "../../../node_modules/rc-field-form/es/ListContext.js"); /* harmony import */ var _useWatch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useWatch */ "../../../node_modules/rc-field-form/es/useWatch.js"); var InternalForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_Form__WEBPACK_IMPORTED_MODULE_4__["default"]); var RefForm = InternalForm; RefForm.FormProvider = _FormContext__WEBPACK_IMPORTED_MODULE_5__.FormProvider; RefForm.Field = _Field__WEBPACK_IMPORTED_MODULE_1__["default"]; RefForm.List = _List__WEBPACK_IMPORTED_MODULE_2__["default"]; RefForm.useForm = _useForm__WEBPACK_IMPORTED_MODULE_3__["default"]; RefForm.useWatch = _useWatch__WEBPACK_IMPORTED_MODULE_8__["default"]; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefForm); /***/ }), /***/ "../../../node_modules/rc-field-form/es/useForm.js": /*!*********************************************************!*\ !*** ../../../node_modules/rc-field-form/es/useForm.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FormStore: () => (/* binding */ FormStore), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* 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_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_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.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_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_createClass__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js"); /* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/utils/set */ "../../../node_modules/rc-util/es/utils/set.js"); /* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_10__); /* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./FieldContext */ "../../../node_modules/rc-field-form/es/FieldContext.js"); /* harmony import */ var _utils_asyncUtil__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/asyncUtil */ "../../../node_modules/rc-field-form/es/utils/asyncUtil.js"); /* harmony import */ var _utils_messages__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/messages */ "../../../node_modules/rc-field-form/es/utils/messages.js"); /* harmony import */ var _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/NameMap */ "../../../node_modules/rc-field-form/es/utils/NameMap.js"); /* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./utils/valueUtil */ "../../../node_modules/rc-field-form/es/utils/valueUtil.js"); var _excluded = ["name"]; var FormStore = /*#__PURE__*/(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_5__["default"])(function FormStore(forceRootUpdate) { var _this = this; (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_6__["default"])(this, FormStore); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "formHooked", false); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "forceRootUpdate", void 0); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "subscribable", true); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "store", {}); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "fieldEntities", []); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "initialValues", {}); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "callbacks", {}); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "validateMessages", null); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "preserve", null); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "lastValidatePromise", null); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getForm", function () { return { getFieldValue: _this.getFieldValue, getFieldsValue: _this.getFieldsValue, getFieldError: _this.getFieldError, getFieldWarning: _this.getFieldWarning, getFieldsError: _this.getFieldsError, isFieldsTouched: _this.isFieldsTouched, isFieldTouched: _this.isFieldTouched, isFieldValidating: _this.isFieldValidating, isFieldsValidating: _this.isFieldsValidating, resetFields: _this.resetFields, setFields: _this.setFields, setFieldValue: _this.setFieldValue, setFieldsValue: _this.setFieldsValue, validateFields: _this.validateFields, submit: _this.submit, _init: true, getInternalHooks: _this.getInternalHooks }; }); // ======================== Internal Hooks ======================== (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getInternalHooks", function (key) { if (key === _FieldContext__WEBPACK_IMPORTED_MODULE_11__.HOOK_MARK) { _this.formHooked = true; return { dispatch: _this.dispatch, initEntityValue: _this.initEntityValue, registerField: _this.registerField, useSubscribe: _this.useSubscribe, setInitialValues: _this.setInitialValues, destroyForm: _this.destroyForm, setCallbacks: _this.setCallbacks, setValidateMessages: _this.setValidateMessages, getFields: _this.getFields, setPreserve: _this.setPreserve, getInitialValue: _this.getInitialValue, registerWatch: _this.registerWatch }; } (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_9__["default"])(false, '`getInternalHooks` is internal usage. Should not call directly.'); return null; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "useSubscribe", function (subscribable) { _this.subscribable = subscribable; }); /** * Record prev Form unmount fieldEntities which config preserve false. * This need to be refill with initialValues instead of store value. */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "prevWithoutPreserves", null); /** * First time `setInitialValues` should update store with initial value */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setInitialValues", function (initialValues, init) { _this.initialValues = initialValues || {}; if (init) { var _this$prevWithoutPres; var nextStore = (0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_8__.merge)(initialValues, _this.store); // We will take consider prev form unmount fields. // When the field is not `preserve`, we need fill this with initialValues instead of store. // eslint-disable-next-line array-callback-return (_this$prevWithoutPres = _this.prevWithoutPreserves) === null || _this$prevWithoutPres === void 0 || _this$prevWithoutPres.map(function (_ref) { var namePath = _ref.key; nextStore = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(nextStore, namePath, (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getValue)(initialValues, namePath)); }); _this.prevWithoutPreserves = null; _this.updateStore(nextStore); } }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "destroyForm", function (clearOnDestroy) { if (clearOnDestroy) { // destroy form reset store _this.updateStore({}); } else { // Fill preserve fields var prevWithoutPreserves = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__["default"](); _this.getFieldEntities(true).forEach(function (entity) { if (!_this.isMergedPreserve(entity.isPreserve())) { prevWithoutPreserves.set(entity.getNamePath(), true); } }); _this.prevWithoutPreserves = prevWithoutPreserves; } }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getInitialValue", function (namePath) { var initValue = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getValue)(_this.initialValues, namePath); // Not cloneDeep when without `namePath` return namePath.length ? (0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_8__.merge)(initValue) : initValue; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setCallbacks", function (callbacks) { _this.callbacks = callbacks; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setValidateMessages", function (validateMessages) { _this.validateMessages = validateMessages; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setPreserve", function (preserve) { _this.preserve = preserve; }); // ============================= Watch ============================ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "watchList", []); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "registerWatch", function (callback) { _this.watchList.push(callback); return function () { _this.watchList = _this.watchList.filter(function (fn) { return fn !== callback; }); }; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "notifyWatch", function () { var namePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; // No need to cost perf when nothing need to watch if (_this.watchList.length) { var values = _this.getFieldsValue(); var allValues = _this.getFieldsValue(true); _this.watchList.forEach(function (callback) { callback(values, allValues, namePath); }); } }); // ========================== Dev Warning ========================= (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "timeoutId", null); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "warningUnhooked", function () { if ( true && !_this.timeoutId && typeof window !== 'undefined') { _this.timeoutId = setTimeout(function () { _this.timeoutId = null; if (!_this.formHooked) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_9__["default"])(false, 'Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?'); } }); } }); // ============================ Store ============================= (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "updateStore", function (nextStore) { _this.store = nextStore; }); // ============================ Fields ============================ /** * Get registered field entities. * @param pure Only return field which has a `name`. Default: false */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldEntities", function () { var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!pure) { return _this.fieldEntities; } return _this.fieldEntities.filter(function (field) { return field.getNamePath().length; }); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldsMap", function () { var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var cache = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__["default"](); _this.getFieldEntities(pure).forEach(function (field) { var namePath = field.getNamePath(); cache.set(namePath, field); }); return cache; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldEntitiesForNamePathList", function (nameList) { if (!nameList) { return _this.getFieldEntities(true); } var cache = _this.getFieldsMap(true); return nameList.map(function (name) { var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name); return cache.get(namePath) || { INVALIDATE_NAME_PATH: (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name) }; }); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldsValue", function (nameList, filterFunc) { _this.warningUnhooked(); // Fill args var mergedNameList; var mergedFilterFunc; var mergedStrict; if (nameList === true || Array.isArray(nameList)) { mergedNameList = nameList; mergedFilterFunc = filterFunc; } else if (nameList && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__["default"])(nameList) === 'object') { mergedStrict = nameList.strict; mergedFilterFunc = nameList.filter; } if (mergedNameList === true && !mergedFilterFunc) { return _this.store; } var fieldEntities = _this.getFieldEntitiesForNamePathList(Array.isArray(mergedNameList) ? mergedNameList : null); var filteredNameList = []; fieldEntities.forEach(function (entity) { var _isListField, _ref3; var namePath = 'INVALIDATE_NAME_PATH' in entity ? entity.INVALIDATE_NAME_PATH : entity.getNamePath(); // Ignore when it's a list item and not specific the namePath, // since parent field is already take in count if (mergedStrict) { var _isList, _ref2; if ((_isList = (_ref2 = entity).isList) !== null && _isList !== void 0 && _isList.call(_ref2)) { return; } } else if (!mergedNameList && (_isListField = (_ref3 = entity).isListField) !== null && _isListField !== void 0 && _isListField.call(_ref3)) { return; } if (!mergedFilterFunc) { filteredNameList.push(namePath); } else { var meta = 'getMeta' in entity ? entity.getMeta() : null; if (mergedFilterFunc(meta)) { filteredNameList.push(namePath); } } }); return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.cloneByNamePathList)(_this.store, filteredNameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldValue", function (name) { _this.warningUnhooked(); var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name); return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getValue)(_this.store, namePath); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldsError", function (nameList) { _this.warningUnhooked(); var fieldEntities = _this.getFieldEntitiesForNamePathList(nameList); return fieldEntities.map(function (entity, index) { if (entity && !('INVALIDATE_NAME_PATH' in entity)) { return { name: entity.getNamePath(), errors: entity.getErrors(), warnings: entity.getWarnings() }; } return { name: (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(nameList[index]), errors: [], warnings: [] }; }); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldError", function (name) { _this.warningUnhooked(); var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name); var fieldError = _this.getFieldsError([namePath])[0]; return fieldError.errors; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFieldWarning", function (name) { _this.warningUnhooked(); var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name); var fieldError = _this.getFieldsError([namePath])[0]; return fieldError.warnings; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "isFieldsTouched", function () { _this.warningUnhooked(); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var arg0 = args[0], arg1 = args[1]; var namePathList; var isAllFieldsTouched = false; if (args.length === 0) { namePathList = null; } else if (args.length === 1) { if (Array.isArray(arg0)) { namePathList = arg0.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath); isAllFieldsTouched = false; } else { namePathList = null; isAllFieldsTouched = arg0; } } else { namePathList = arg0.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath); isAllFieldsTouched = arg1; } var fieldEntities = _this.getFieldEntities(true); var isFieldTouched = function isFieldTouched(field) { return field.isFieldTouched(); }; // ===== Will get fully compare when not config namePathList ===== if (!namePathList) { return isAllFieldsTouched ? fieldEntities.every(function (entity) { return isFieldTouched(entity) || entity.isList(); }) : fieldEntities.some(isFieldTouched); } // Generate a nest tree for validate var map = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__["default"](); namePathList.forEach(function (shortNamePath) { map.set(shortNamePath, []); }); fieldEntities.forEach(function (field) { var fieldNamePath = field.getNamePath(); // Find matched entity and put into list namePathList.forEach(function (shortNamePath) { if (shortNamePath.every(function (nameUnit, i) { return fieldNamePath[i] === nameUnit; })) { map.update(shortNamePath, function (list) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(list), [field]); }); } }); }); // Check if NameMap value is touched var isNamePathListTouched = function isNamePathListTouched(entities) { return entities.some(isFieldTouched); }; var namePathListEntities = map.map(function (_ref4) { var value = _ref4.value; return value; }); return isAllFieldsTouched ? namePathListEntities.every(isNamePathListTouched) : namePathListEntities.some(isNamePathListTouched); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "isFieldTouched", function (name) { _this.warningUnhooked(); return _this.isFieldsTouched([name]); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "isFieldsValidating", function (nameList) { _this.warningUnhooked(); var fieldEntities = _this.getFieldEntities(); if (!nameList) { return fieldEntities.some(function (testField) { return testField.isFieldValidating(); }); } var namePathList = nameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath); return fieldEntities.some(function (testField) { var fieldNamePath = testField.getNamePath(); return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.containsNamePath)(namePathList, fieldNamePath) && testField.isFieldValidating(); }); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "isFieldValidating", function (name) { _this.warningUnhooked(); return _this.isFieldsValidating([name]); }); /** * Reset Field with field `initialValue` prop. * Can pass `entities` or `namePathList` or just nothing. */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "resetWithFieldInitialValue", function () { var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // Create cache var cache = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__["default"](); var fieldEntities = _this.getFieldEntities(true); fieldEntities.forEach(function (field) { var initialValue = field.props.initialValue; var namePath = field.getNamePath(); // Record only if has `initialValue` if (initialValue !== undefined) { var records = cache.get(namePath) || new Set(); records.add({ entity: field, value: initialValue }); cache.set(namePath, records); } }); // Reset var resetWithFields = function resetWithFields(entities) { entities.forEach(function (field) { var initialValue = field.props.initialValue; if (initialValue !== undefined) { var namePath = field.getNamePath(); var formInitialValue = _this.getInitialValue(namePath); if (formInitialValue !== undefined) { // Warning if conflict with form initialValues and do not modify value (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_9__["default"])(false, "Form already set 'initialValues' with path '".concat(namePath.join('.'), "'. Field can not overwrite it.")); } else { var records = cache.get(namePath); if (records && records.size > 1) { // Warning if multiple field set `initialValue`and do not modify value (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_9__["default"])(false, "Multiple Field with path '".concat(namePath.join('.'), "' set 'initialValue'. Can not decide which one to pick.")); } else if (records) { var originValue = _this.getFieldValue(namePath); var isListField = field.isListField(); // Set `initialValue` if (!isListField && (!info.skipExist || originValue === undefined)) { _this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(_this.store, namePath, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(records)[0].value)); } } } } }); }; var requiredFieldEntities; if (info.entities) { requiredFieldEntities = info.entities; } else if (info.namePathList) { requiredFieldEntities = []; info.namePathList.forEach(function (namePath) { var records = cache.get(namePath); if (records) { var _requiredFieldEntitie; (_requiredFieldEntitie = requiredFieldEntities).push.apply(_requiredFieldEntitie, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(records).map(function (r) { return r.entity; }))); } }); } else { requiredFieldEntities = fieldEntities; } resetWithFields(requiredFieldEntities); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "resetFields", function (nameList) { _this.warningUnhooked(); var prevStore = _this.store; if (!nameList) { _this.updateStore((0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_8__.merge)(_this.initialValues)); _this.resetWithFieldInitialValue(); _this.notifyObservers(prevStore, null, { type: 'reset' }); _this.notifyWatch(); return; } // Reset by `nameList` var namePathList = nameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath); namePathList.forEach(function (namePath) { var initialValue = _this.getInitialValue(namePath); _this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(_this.store, namePath, initialValue)); }); _this.resetWithFieldInitialValue({ namePathList: namePathList }); _this.notifyObservers(prevStore, namePathList, { type: 'reset' }); _this.notifyWatch(namePathList); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setFields", function (fields) { _this.warningUnhooked(); var prevStore = _this.store; var namePathList = []; fields.forEach(function (fieldData) { var name = fieldData.name, data = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(fieldData, _excluded); var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name); namePathList.push(namePath); // Value if ('value' in data) { _this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(_this.store, namePath, data.value)); } _this.notifyObservers(prevStore, [namePath], { type: 'setField', data: fieldData }); }); _this.notifyWatch(namePathList); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getFields", function () { var entities = _this.getFieldEntities(true); var fields = entities.map(function (field) { var namePath = field.getNamePath(); var meta = field.getMeta(); var fieldData = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, meta), {}, { name: namePath, value: _this.getFieldValue(namePath) }); Object.defineProperty(fieldData, 'originRCField', { value: true }); return fieldData; }); return fields; }); // =========================== Observer =========================== /** * This only trigger when a field is on constructor to avoid we get initialValue too late */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "initEntityValue", function (entity) { var initialValue = entity.props.initialValue; if (initialValue !== undefined) { var namePath = entity.getNamePath(); var prevValue = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getValue)(_this.store, namePath); if (prevValue === undefined) { _this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(_this.store, namePath, initialValue)); } } }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "isMergedPreserve", function (fieldPreserve) { var mergedPreserve = fieldPreserve !== undefined ? fieldPreserve : _this.preserve; return mergedPreserve !== null && mergedPreserve !== void 0 ? mergedPreserve : true; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "registerField", function (entity) { _this.fieldEntities.push(entity); var namePath = entity.getNamePath(); _this.notifyWatch([namePath]); // Set initial values if (entity.props.initialValue !== undefined) { var prevStore = _this.store; _this.resetWithFieldInitialValue({ entities: [entity], skipExist: true }); _this.notifyObservers(prevStore, [entity.getNamePath()], { type: 'valueUpdate', source: 'internal' }); } // un-register field callback return function (isListField, preserve) { var subNamePath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; _this.fieldEntities = _this.fieldEntities.filter(function (item) { return item !== entity; }); // Clean up store value if not preserve if (!_this.isMergedPreserve(preserve) && (!isListField || subNamePath.length > 1)) { var defaultValue = isListField ? undefined : _this.getInitialValue(namePath); if (namePath.length && _this.getFieldValue(namePath) !== defaultValue && _this.fieldEntities.every(function (field) { return ( // Only reset when no namePath exist !(0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.matchNamePath)(field.getNamePath(), namePath) ); })) { var _prevStore = _this.store; _this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(_prevStore, namePath, defaultValue, true)); // Notify that field is unmount _this.notifyObservers(_prevStore, [namePath], { type: 'remove' }); // Dependencies update _this.triggerDependenciesUpdate(_prevStore, namePath); } } _this.notifyWatch([namePath]); }; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "dispatch", function (action) { switch (action.type) { case 'updateValue': { var namePath = action.namePath, value = action.value; _this.updateValue(namePath, value); break; } case 'validateField': { var _namePath = action.namePath, triggerName = action.triggerName; _this.validateFields([_namePath], { triggerName: triggerName }); break; } default: // Currently we don't have other action. Do nothing. } }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "notifyObservers", function (prevStore, namePathList, info) { if (_this.subscribable) { var mergedInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, info), {}, { store: _this.getFieldsValue(true) }); _this.getFieldEntities().forEach(function (_ref5) { var onStoreChange = _ref5.onStoreChange; onStoreChange(prevStore, namePathList, mergedInfo); }); } else { _this.forceRootUpdate(); } }); /** * Notify dependencies children with parent update * We need delay to trigger validate in case Field is under render props */ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "triggerDependenciesUpdate", function (prevStore, namePath) { var childrenFields = _this.getDependencyChildrenFields(namePath); if (childrenFields.length) { _this.validateFields(childrenFields); } _this.notifyObservers(prevStore, childrenFields, { type: 'dependenciesUpdate', relatedFields: [namePath].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(childrenFields)) }); return childrenFields; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "updateValue", function (name, value) { var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(name); var prevStore = _this.store; _this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.setValue)(_this.store, namePath, value)); _this.notifyObservers(prevStore, [namePath], { type: 'valueUpdate', source: 'internal' }); _this.notifyWatch([namePath]); // Dependencies update var childrenFields = _this.triggerDependenciesUpdate(prevStore, namePath); // trigger callback function var onValuesChange = _this.callbacks.onValuesChange; if (onValuesChange) { var changedValues = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.cloneByNamePathList)(_this.store, [namePath]); onValuesChange(changedValues, _this.getFieldsValue()); } _this.triggerOnFieldsChange([namePath].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(childrenFields))); }); // Let all child Field get update. (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setFieldsValue", function (store) { _this.warningUnhooked(); var prevStore = _this.store; if (store) { var nextStore = (0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_8__.merge)(_this.store, store); _this.updateStore(nextStore); } _this.notifyObservers(prevStore, null, { type: 'valueUpdate', source: 'external' }); _this.notifyWatch(); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "setFieldValue", function (name, value) { _this.setFields([{ name: name, value: value, errors: [], warnings: [] }]); }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "getDependencyChildrenFields", function (rootNamePath) { var children = new Set(); var childrenFields = []; var dependencies2fields = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__["default"](); /** * Generate maps * Can use cache to save perf if user report performance issue with this */ _this.getFieldEntities().forEach(function (field) { var dependencies = field.props.dependencies; (dependencies || []).forEach(function (dependency) { var dependencyNamePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath)(dependency); dependencies2fields.update(dependencyNamePath, function () { var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Set(); fields.add(field); return fields; }); }); }); var fillChildren = function fillChildren(namePath) { var fields = dependencies2fields.get(namePath) || new Set(); fields.forEach(function (field) { if (!children.has(field)) { children.add(field); var fieldNamePath = field.getNamePath(); if (field.isFieldDirty() && fieldNamePath.length) { childrenFields.push(fieldNamePath); fillChildren(fieldNamePath); } } }); }; fillChildren(rootNamePath); return childrenFields; }); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "triggerOnFieldsChange", function (namePathList, filedErrors) { var onFieldsChange = _this.callbacks.onFieldsChange; if (onFieldsChange) { var fields = _this.getFields(); /** * Fill errors since `fields` may be replaced by controlled fields */ if (filedErrors) { var cache = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_14__["default"](); filedErrors.forEach(function (_ref6) { var name = _ref6.name, errors = _ref6.errors; cache.set(name, errors); }); fields.forEach(function (field) { // eslint-disable-next-line no-param-reassign field.errors = cache.get(field.name) || field.errors; }); } var changedFields = fields.filter(function (_ref7) { var fieldName = _ref7.name; return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.containsNamePath)(namePathList, fieldName); }); if (changedFields.length) { onFieldsChange(changedFields, fields); } } }); // =========================== Validate =========================== (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "validateFields", function (arg1, arg2) { _this.warningUnhooked(); var nameList; var options; if (Array.isArray(arg1) || typeof arg1 === 'string' || typeof arg2 === 'string') { nameList = arg1; options = arg2; } else { options = arg1; } var provideNameList = !!nameList; var namePathList = provideNameList ? nameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.getNamePath) : []; // Collect result in promise list var promiseList = []; // We temp save the path which need trigger for `onFieldsChange` var TMP_SPLIT = String(Date.now()); var validateNamePathList = new Set(); var _ref8 = options || {}, recursive = _ref8.recursive, dirty = _ref8.dirty; _this.getFieldEntities(true).forEach(function (field) { // Add field if not provide `nameList` if (!provideNameList) { namePathList.push(field.getNamePath()); } // Skip if without rule if (!field.props.rules || !field.props.rules.length) { return; } // Skip if only validate dirty field if (dirty && !field.isFieldDirty()) { return; } var fieldNamePath = field.getNamePath(); validateNamePathList.add(fieldNamePath.join(TMP_SPLIT)); // Add field validate rule in to promise list if (!provideNameList || (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_15__.containsNamePath)(namePathList, fieldNamePath, recursive)) { var promise = field.validateRules((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({ validateMessages: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _utils_messages__WEBPACK_IMPORTED_MODULE_13__.defaultValidateMessages), _this.validateMessages) }, options)); // Wrap promise with field promiseList.push(promise.then(function () { return { name: fieldNamePath, errors: [], warnings: [] }; }).catch(function (ruleErrors) { var _ruleErrors$forEach; var mergedErrors = []; var mergedWarnings = []; (_ruleErrors$forEach = ruleErrors.forEach) === null || _ruleErrors$forEach === void 0 || _ruleErrors$forEach.call(ruleErrors, function (_ref9) { var warningOnly = _ref9.rule.warningOnly, errors = _ref9.errors; if (warningOnly) { mergedWarnings.push.apply(mergedWarnings, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(errors)); } else { mergedErrors.push.apply(mergedErrors, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(errors)); } }); if (mergedErrors.length) { return Promise.reject({ name: fieldNamePath, errors: mergedErrors, warnings: mergedWarnings }); } return { name: fieldNamePath, errors: mergedErrors, warnings: mergedWarnings }; })); } }); var summaryPromise = (0,_utils_asyncUtil__WEBPACK_IMPORTED_MODULE_12__.allPromiseFinish)(promiseList); _this.lastValidatePromise = summaryPromise; // Notify fields with rule that validate has finished and need update summaryPromise.catch(function (results) { return results; }).then(function (results) { var resultNamePathList = results.map(function (_ref10) { var name = _ref10.name; return name; }); _this.notifyObservers(_this.store, resultNamePathList, { type: 'validateFinish' }); _this.triggerOnFieldsChange(resultNamePathList, results); }); var returnPromise = summaryPromise.then(function () { if (_this.lastValidatePromise === summaryPromise) { return Promise.resolve(_this.getFieldsValue(namePathList)); } return Promise.reject([]); }).catch(function (results) { var errorList = results.filter(function (result) { return result && result.errors.length; }); return Promise.reject({ values: _this.getFieldsValue(namePathList), errorFields: errorList, outOfDate: _this.lastValidatePromise !== summaryPromise }); }); // Do not throw in console returnPromise.catch(function (e) { return e; }); // `validating` changed. Trigger `onFieldsChange` var triggerNamePathList = namePathList.filter(function (namePath) { return validateNamePathList.has(namePath.join(TMP_SPLIT)); }); _this.triggerOnFieldsChange(triggerNamePathList); return returnPromise; }); // ============================ Submit ============================ (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__["default"])(this, "submit", function () { _this.warningUnhooked(); _this.validateFields().then(function (values) { var onFinish = _this.callbacks.onFinish; if (onFinish) { try { onFinish(values); } catch (err) { // Should print error if user `onFinish` callback failed console.error(err); } } }).catch(function (e) { var onFinishFailed = _this.callbacks.onFinishFailed; if (onFinishFailed) { onFinishFailed(e); } }); }); this.forceRootUpdate = forceRootUpdate; }); function useForm(form) { var formRef = react__WEBPACK_IMPORTED_MODULE_10__.useRef(); var _React$useState = react__WEBPACK_IMPORTED_MODULE_10__.useState({}), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2), forceUpdate = _React$useState2[1]; if (!formRef.current) { if (form) { formRef.current = form; } else { // Create a new FormStore if not provided var forceReRender = function forceReRender() { forceUpdate({}); }; var formStore = new FormStore(forceReRender); formRef.current = formStore.getForm(); } } return [formRef.current]; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useForm); /***/ }), /***/ "../../../node_modules/rc-field-form/es/useWatch.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-field-form/es/useWatch.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 */ stringify: () => (/* binding */ stringify) /* 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_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__); /* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FieldContext */ "../../../node_modules/rc-field-form/es/FieldContext.js"); /* harmony import */ var _utils_typeUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/typeUtil */ "../../../node_modules/rc-field-form/es/utils/typeUtil.js"); /* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/valueUtil */ "../../../node_modules/rc-field-form/es/utils/valueUtil.js"); function stringify(value) { try { return JSON.stringify(value); } catch (err) { return Math.random(); } } var useWatchWarning = true ? function (namePath) { var fullyStr = namePath.join('__RC_FIELD_FORM_SPLIT__'); var nameStrRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(fullyStr); (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(nameStrRef.current === fullyStr, '`useWatch` is not support dynamic `namePath`. Please provide static instead.'); } : 0; // ------- selector type ------- // ------- selector type end ------- function useWatch() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var dependencies = args[0], _args$ = args[1], _form = _args$ === void 0 ? {} : _args$; var options = (0,_utils_typeUtil__WEBPACK_IMPORTED_MODULE_4__.isFormInstance)(_form) ? { form: _form } : _form; var form = options.form; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(), _useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2), value = _useState2[0], setValue = _useState2[1]; var valueStr = (0,react__WEBPACK_IMPORTED_MODULE_2__.useMemo)(function () { return stringify(value); }, [value]); var valueStrRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(valueStr); valueStrRef.current = valueStr; var fieldContext = (0,react__WEBPACK_IMPORTED_MODULE_2__.useContext)(_FieldContext__WEBPACK_IMPORTED_MODULE_3__["default"]); var formInstance = form || fieldContext; var isValidForm = formInstance && formInstance._init; // Warning if not exist form instance if (true) { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(args.length === 2 ? form ? isValidForm : true : isValidForm, 'useWatch requires a form instance since it can not auto detect from context.'); } var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__.getNamePath)(dependencies); var namePathRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(namePath); namePathRef.current = namePath; useWatchWarning(namePath); (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(function () { // Skip if not exist form instance if (!isValidForm) { return; } var getFieldsValue = formInstance.getFieldsValue, getInternalHooks = formInstance.getInternalHooks; var _getInternalHooks = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_3__.HOOK_MARK), registerWatch = _getInternalHooks.registerWatch; var getWatchValue = function getWatchValue(values, allValues) { var watchValue = options.preserve ? allValues : values; return typeof dependencies === 'function' ? dependencies(watchValue) : (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__.getValue)(watchValue, namePathRef.current); }; var cancelRegister = registerWatch(function (values, allValues) { var newValue = getWatchValue(values, allValues); var nextValueStr = stringify(newValue); // Compare stringify in case it's nest object if (valueStrRef.current !== nextValueStr) { valueStrRef.current = nextValueStr; setValue(newValue); } }); // TODO: We can improve this perf in future var initialValue = getWatchValue(getFieldsValue(), getFieldsValue(true)); // React 18 has the bug that will queue update twice even the value is not changed // ref: https://github.com/facebook/react/issues/27213 if (value !== initialValue) { setValue(initialValue); } return cancelRegister; }, // We do not need re-register since namePath content is the same // eslint-disable-next-line react-hooks/exhaustive-deps [isValidForm]); return value; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useWatch); /***/ }), /***/ "../../../node_modules/rc-field-form/es/utils/NameMap.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/utils/NameMap.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_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 _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __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_3__ = __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_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); var SPLIT = '__@field_split__'; /** * Convert name path into string to fast the fetch speed of Map. */ function normalize(namePath) { return namePath.map(function (cell) { return "".concat((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_5__["default"])(cell), ":").concat(cell); }) // Magic split .join(SPLIT); } /** * NameMap like a `Map` but accepts `string[]` as key. */ var NameMap = /*#__PURE__*/function () { function NameMap() { (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__["default"])(this, NameMap); (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(this, "kvs", new Map()); } (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__["default"])(NameMap, [{ key: "set", value: function set(key, value) { this.kvs.set(normalize(key), value); } }, { key: "get", value: function get(key) { return this.kvs.get(normalize(key)); } }, { key: "update", value: function update(key, updater) { var origin = this.get(key); var next = updater(origin); if (!next) { this.delete(key); } else { this.set(key, next); } } }, { key: "delete", value: function _delete(key) { this.kvs.delete(normalize(key)); } // Since we only use this in test, let simply realize this }, { key: "map", value: function map(callback) { return (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(this.kvs.entries()).map(function (_ref) { var _ref2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, 2), key = _ref2[0], value = _ref2[1]; var cells = key.split(SPLIT); return callback({ key: cells.map(function (cell) { var _cell$match = cell.match(/^([^:]*):(.*)$/), _cell$match2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_cell$match, 3), type = _cell$match2[1], unit = _cell$match2[2]; return type === 'number' ? Number(unit) : unit; }), value: value }); }); } }, { key: "toJSON", value: function toJSON() { var json = {}; this.map(function (_ref3) { var key = _ref3.key, value = _ref3.value; json[key.join('.')] = value; return null; }); return json; } }]); return NameMap; }(); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NameMap); /***/ }), /***/ "../../../node_modules/rc-field-form/es/utils/asyncUtil.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/utils/asyncUtil.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ allPromiseFinish: () => (/* binding */ allPromiseFinish) /* harmony export */ }); function allPromiseFinish(promiseList) { var hasError = false; var count = promiseList.length; var results = []; if (!promiseList.length) { return Promise.resolve([]); } return new Promise(function (resolve, reject) { promiseList.forEach(function (promise, index) { promise.catch(function (e) { hasError = true; return e; }).then(function (result) { count -= 1; results[index] = result; if (count > 0) { return; } if (hasError) { reject(results); } resolve(results); }); }); }); } /***/ }), /***/ "../../../node_modules/rc-field-form/es/utils/messages.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/utils/messages.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ defaultValidateMessages: () => (/* binding */ defaultValidateMessages) /* harmony export */ }); var typeTemplate = "'${name}' is not a valid ${type}"; var defaultValidateMessages = { default: "Validation error on field '${name}'", required: "'${name}' is required", enum: "'${name}' must be one of [${enum}]", whitespace: "'${name}' cannot be empty", date: { format: "'${name}' is invalid for format date", parse: "'${name}' could not be parsed as date", invalid: "'${name}' is invalid date" }, types: { string: typeTemplate, method: typeTemplate, array: typeTemplate, object: typeTemplate, number: typeTemplate, date: typeTemplate, boolean: typeTemplate, integer: typeTemplate, float: typeTemplate, regexp: typeTemplate, email: typeTemplate, url: typeTemplate, hex: typeTemplate }, string: { len: "'${name}' must be exactly ${len} characters", min: "'${name}' must be at least ${min} characters", max: "'${name}' cannot be longer than ${max} characters", range: "'${name}' must be between ${min} and ${max} characters" }, number: { len: "'${name}' must equal ${len}", min: "'${name}' cannot be less than ${min}", max: "'${name}' cannot be greater than ${max}", range: "'${name}' must be between ${min} and ${max}" }, array: { len: "'${name}' must be exactly ${len} in length", min: "'${name}' cannot be less than ${min} in length", max: "'${name}' cannot be greater than ${max} in length", range: "'${name}' must be between ${min} and ${max} in length" }, pattern: { mismatch: "'${name}' does not match pattern ${pattern}" } }; /***/ }), /***/ "../../../node_modules/rc-field-form/es/utils/typeUtil.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/utils/typeUtil.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isFormInstance: () => (/* binding */ isFormInstance), /* harmony export */ toArray: () => (/* binding */ toArray) /* harmony export */ }); function toArray(value) { if (value === undefined || value === null) { return []; } return Array.isArray(value) ? value : [value]; } function isFormInstance(form) { return form && !!form._init; } /***/ }), /***/ "../../../node_modules/rc-field-form/es/utils/validateUtil.js": /*!********************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/utils/validateUtil.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ validateRules: () => (/* binding */ validateRules) /* 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 _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_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/regeneratorRuntime */ "../../../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/asyncToGenerator */ "../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js"); /* harmony import */ var _rc_component_async_validator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @rc-component/async-validator */ "../../../node_modules/@rc-component/async-validator/es/index.js"); /* 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 rc_util_es_warning__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rc-util/es/warning */ "../../../node_modules/rc-util/es/warning.js"); /* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./messages */ "../../../node_modules/rc-field-form/es/utils/messages.js"); /* harmony import */ var rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rc-util/es/utils/set */ "../../../node_modules/rc-util/es/utils/set.js"); // Remove incorrect original ts define var AsyncValidator = _rc_component_async_validator__WEBPACK_IMPORTED_MODULE_5__["default"]; /** * Replace with template. * `I'm ${name}` + { name: 'bamboo' } = I'm bamboo */ function replaceMessage(template, kv) { return template.replace(/\\?\$\{\w+\}/g, function (str) { if (str.startsWith('\\')) { return str.slice(1); } var key = str.slice(2, -1); return kv[key]; }); } var CODE_LOGIC_ERROR = 'CODE_LOGIC_ERROR'; function validateRule(_x, _x2, _x3, _x4, _x5) { return _validateRule.apply(this, arguments); } /** * We use `async-validator` to validate the value. * But only check one value in a time to avoid namePath validate issue. */ function _validateRule() { _validateRule = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee2(name, value, rule, options, messageVariables) { var cloneRule, originValidator, subRuleField, validator, messages, result, subResults, kv, fillVariableResult; return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: cloneRule = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, rule); // Bug of `async-validator` // https://github.com/react-component/field-form/issues/316 // https://github.com/react-component/field-form/issues/313 delete cloneRule.ruleIndex; // https://github.com/ant-design/ant-design/issues/40497#issuecomment-1422282378 AsyncValidator.warning = function () { return void 0; }; if (cloneRule.validator) { originValidator = cloneRule.validator; cloneRule.validator = function () { try { return originValidator.apply(void 0, arguments); } catch (error) { console.error(error); return Promise.reject(CODE_LOGIC_ERROR); } }; } // We should special handle array validate subRuleField = null; if (cloneRule && cloneRule.type === 'array' && cloneRule.defaultField) { subRuleField = cloneRule.defaultField; delete cloneRule.defaultField; } validator = new AsyncValidator((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, name, [cloneRule])); messages = (0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_9__.merge)(_messages__WEBPACK_IMPORTED_MODULE_8__.defaultValidateMessages, options.validateMessages); validator.messages(messages); result = []; _context2.prev = 10; _context2.next = 13; return Promise.resolve(validator.validate((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, name, value), (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, options))); case 13: _context2.next = 18; break; case 15: _context2.prev = 15; _context2.t0 = _context2["catch"](10); if (_context2.t0.errors) { result = _context2.t0.errors.map(function (_ref4, index) { var message = _ref4.message; var mergedMessage = message === CODE_LOGIC_ERROR ? messages.default : message; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.isValidElement(mergedMessage) ? /*#__PURE__*/ // Wrap ReactNode with `key` react__WEBPACK_IMPORTED_MODULE_6__.cloneElement(mergedMessage, { key: "error_".concat(index) }) : mergedMessage; }); } case 18: if (!(!result.length && subRuleField)) { _context2.next = 23; break; } _context2.next = 21; return Promise.all(value.map(function (subValue, i) { return validateRule("".concat(name, ".").concat(i), subValue, subRuleField, options, messageVariables); })); case 21: subResults = _context2.sent; return _context2.abrupt("return", subResults.reduce(function (prev, errors) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(prev), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(errors)); }, [])); case 23: // Replace message with variables kv = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, rule), {}, { name: name, enum: (rule.enum || []).join(', ') }, messageVariables); fillVariableResult = result.map(function (error) { if (typeof error === 'string') { return replaceMessage(error, kv); } return error; }); return _context2.abrupt("return", fillVariableResult); case 26: case "end": return _context2.stop(); } }, _callee2, null, [[10, 15]]); })); return _validateRule.apply(this, arguments); } function validateRules(namePath, value, rules, options, validateFirst, messageVariables) { var name = namePath.join('.'); // Fill rule with context var filledRules = rules.map(function (currentRule, ruleIndex) { var originValidatorFunc = currentRule.validator; var cloneRule = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, currentRule), {}, { ruleIndex: ruleIndex }); // Replace validator if needed if (originValidatorFunc) { cloneRule.validator = function (rule, val, callback) { var hasPromise = false; // Wrap callback only accept when promise not provided var wrappedCallback = function wrappedCallback() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } // Wait a tick to make sure return type is a promise Promise.resolve().then(function () { (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_7__["default"])(!hasPromise, 'Your validator function has already return a promise. `callback` will be ignored.'); if (!hasPromise) { callback.apply(void 0, args); } }); }; // Get promise var promise = originValidatorFunc(rule, val, wrappedCallback); hasPromise = promise && typeof promise.then === 'function' && typeof promise.catch === 'function'; /** * 1. Use promise as the first priority. * 2. If promise not exist, use callback with warning instead */ (0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_7__["default"])(hasPromise, '`callback` is deprecated. Please return a promise instead.'); if (hasPromise) { promise.then(function () { callback(); }).catch(function (err) { callback(err || ' '); }); } }; } return cloneRule; }).sort(function (_ref, _ref2) { var w1 = _ref.warningOnly, i1 = _ref.ruleIndex; var w2 = _ref2.warningOnly, i2 = _ref2.ruleIndex; if (!!w1 === !!w2) { // Let keep origin order return i1 - i2; } if (w1) { return 1; } return -1; }); // Do validate rules var summaryPromise; if (validateFirst === true) { // >>>>> Validate by serialization summaryPromise = new Promise( /*#__PURE__*/function () { var _ref3 = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee(resolve, reject) { var i, rule, errors; return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: i = 0; case 1: if (!(i < filledRules.length)) { _context.next = 12; break; } rule = filledRules[i]; _context.next = 5; return validateRule(name, value, rule, options, messageVariables); case 5: errors = _context.sent; if (!errors.length) { _context.next = 9; break; } reject([{ errors: errors, rule: rule }]); return _context.abrupt("return"); case 9: i += 1; _context.next = 1; break; case 12: /* eslint-enable */ resolve([]); case 13: case "end": return _context.stop(); } }, _callee); })); return function (_x6, _x7) { return _ref3.apply(this, arguments); }; }()); } else { // >>>>> Validate by parallel var rulePromises = filledRules.map(function (rule) { return validateRule(name, value, rule, options, messageVariables).then(function (errors) { return { errors: errors, rule: rule }; }); }); summaryPromise = (validateFirst ? finishOnFirstFailed(rulePromises) : finishOnAllFailed(rulePromises)).then(function (errors) { // Always change to rejection for Field to catch return Promise.reject(errors); }); } // Internal catch error to avoid console error log. summaryPromise.catch(function (e) { return e; }); return summaryPromise; } function finishOnAllFailed(_x8) { return _finishOnAllFailed.apply(this, arguments); } function _finishOnAllFailed() { _finishOnAllFailed = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee3(rulePromises) { return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: return _context3.abrupt("return", Promise.all(rulePromises).then(function (errorsList) { var _ref5; var errors = (_ref5 = []).concat.apply(_ref5, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(errorsList)); return errors; })); case 1: case "end": return _context3.stop(); } }, _callee3); })); return _finishOnAllFailed.apply(this, arguments); } function finishOnFirstFailed(_x9) { return _finishOnFirstFailed.apply(this, arguments); } function _finishOnFirstFailed() { _finishOnFirstFailed = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee4(rulePromises) { var count; return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: count = 0; return _context4.abrupt("return", new Promise(function (resolve) { rulePromises.forEach(function (promise) { promise.then(function (ruleError) { if (ruleError.errors.length) { resolve([ruleError]); } count += 1; if (count === rulePromises.length) { resolve([]); } }); }); })); case 2: case "end": return _context4.stop(); } }, _callee4); })); return _finishOnFirstFailed.apply(this, arguments); } /***/ }), /***/ "../../../node_modules/rc-field-form/es/utils/valueUtil.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-field-form/es/utils/valueUtil.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ cloneByNamePathList: () => (/* binding */ cloneByNamePathList), /* harmony export */ containsNamePath: () => (/* binding */ containsNamePath), /* harmony export */ defaultGetValueFromEvent: () => (/* binding */ defaultGetValueFromEvent), /* harmony export */ getNamePath: () => (/* binding */ getNamePath), /* harmony export */ getValue: () => (/* reexport safe */ rc_util_es_utils_get__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ isSimilar: () => (/* binding */ isSimilar), /* harmony export */ matchNamePath: () => (/* binding */ matchNamePath), /* harmony export */ move: () => (/* binding */ move), /* harmony export */ setValue: () => (/* reexport safe */ rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_3__["default"]) /* 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 _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var rc_util_es_utils_get__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/utils/get */ "../../../node_modules/rc-util/es/utils/get.js"); /* harmony import */ var rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/utils/set */ "../../../node_modules/rc-util/es/utils/set.js"); /* harmony import */ var _typeUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeUtil */ "../../../node_modules/rc-field-form/es/utils/typeUtil.js"); /** * Convert name to internal supported format. * This function should keep since we still thinking if need support like `a.b.c` format. * 'a' => ['a'] * 123 => [123] * ['a', 123] => ['a', 123] */ function getNamePath(path) { return (0,_typeUtil__WEBPACK_IMPORTED_MODULE_4__.toArray)(path); } function cloneByNamePathList(store, namePathList) { var newStore = {}; namePathList.forEach(function (namePath) { var value = (0,rc_util_es_utils_get__WEBPACK_IMPORTED_MODULE_2__["default"])(store, namePath); newStore = (0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_3__["default"])(newStore, namePath, value); }); return newStore; } /** * Check if `namePathList` includes `namePath`. * @param namePathList A list of `InternalNamePath[]` * @param namePath Compare `InternalNamePath` * @param partialMatch True will make `[a, b]` match `[a, b, c]` */ function containsNamePath(namePathList, namePath) { var partialMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return namePathList && namePathList.some(function (path) { return matchNamePath(namePath, path, partialMatch); }); } /** * Check if `namePath` is super set or equal of `subNamePath`. * @param namePath A list of `InternalNamePath[]` * @param subNamePath Compare `InternalNamePath` * @param partialMatch True will make `[a, b]` match `[a, b, c]` */ function matchNamePath(namePath, subNamePath) { var partialMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!namePath || !subNamePath) { return false; } if (!partialMatch && namePath.length !== subNamePath.length) { return false; } return subNamePath.every(function (nameUnit, i) { return namePath[i] === nameUnit; }); } // Like `shallowEqual`, but we not check the data which may cause re-render function isSimilar(source, target) { if (source === target) { return true; } if (!source && target || source && !target) { return false; } if (!source || !target || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(source) !== 'object' || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(target) !== 'object') { return false; } var sourceKeys = Object.keys(source); var targetKeys = Object.keys(target); var keys = new Set([].concat(sourceKeys, targetKeys)); return (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(keys).every(function (key) { var sourceValue = source[key]; var targetValue = target[key]; if (typeof sourceValue === 'function' && typeof targetValue === 'function') { return true; } return sourceValue === targetValue; }); } function defaultGetValueFromEvent(valuePropName) { var event = arguments.length <= 1 ? undefined : arguments[1]; if (event && event.target && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(event.target) === 'object' && valuePropName in event.target) { return event.target[valuePropName]; } return event; } /** * Moves an array item from one position in an array to another. * * Note: This is a pure function so a new array will be returned, instead * of altering the array argument. * * @param array Array in which to move an item. (required) * @param moveIndex The index of the item to move. (required) * @param toIndex The index to move item at moveIndex to. (required) */ function move(array, moveIndex, toIndex) { var length = array.length; if (moveIndex < 0 || moveIndex >= length || toIndex < 0 || toIndex >= length) { return array; } var item = array[moveIndex]; var diff = moveIndex - toIndex; if (diff > 0) { // move left return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(array.slice(0, toIndex)), [item], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(array.slice(toIndex, moveIndex)), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(array.slice(moveIndex + 1, length))); } if (diff < 0) { // move right return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(array.slice(0, moveIndex)), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(array.slice(moveIndex + 1, toIndex + 1)), [item], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(array.slice(toIndex + 1, length))); } return array; } /***/ }) }]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtZHJvcGRvd25fZXNfaW5kZXhfanMtbm9kZV9tb2R1bGVzX3JjLWZpZWxkLWZvcm1fZXNfaW5kZXhfanMudm9sdW50ZWVyYXBpLmY0YTk2MGYwNzQyZGU3NTZjOWQyLmJ1bmRsZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEwRDtBQUNjO0FBQ0Y7QUFDb0I7QUFDMUY7QUFDNEM7QUFDUjtBQUNnQztBQUMxQztBQUM4QjtBQUN4QjtBQUNNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxvREFBVTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsOEZBQXdCO0FBQ3pDLHdCQUF3QixxREFBYztBQUN0Qyx1QkFBdUIsb0ZBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1EQUFZO0FBQy9CLG1CQUFtQixtREFBWTtBQUMvQixpQkFBaUIsbURBQVk7QUFDN0IsRUFBRSxnRUFBeUI7QUFDM0I7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1FQUFnQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMERBQW1CLENBQUMsZ0RBQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseURBQWtCO0FBQ3BELGVBQWUsaURBQVU7QUFDekIsU0FBUywwREFBVSxh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O0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQSwrQkFBK0IsNkVBQU87QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsd0ZBQWtCLG1DQUFtQyx3RkFBa0IsbUNBQW1DLHdGQUFrQjtBQUNqSjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsd0ZBQWtCLDZCQUE2Qix3RkFBa0IsbURBQW1ELHdGQUFrQjtBQUMzSjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1kcm9wZG93bi9lcy9Ecm9wZG93bi5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1kcm9wZG93bi9lcy9PdmVybGF5LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWRyb3Bkb3duL2VzL2hvb2tzL3VzZUFjY2Vzc2liaWxpdHkuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtZHJvcGRvd24vZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtZHJvcGRvd24vZXMvcGxhY2VtZW50cy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1maWVsZC1mb3JtL2VzL0ZpZWxkLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvRmllbGRDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvRm9ybS5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1maWVsZC1mb3JtL2VzL0Zvcm1Db250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvTGlzdC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1maWVsZC1mb3JtL2VzL0xpc3RDb250ZXh0LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtZmllbGQtZm9ybS9lcy91c2VGb3JtLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvdXNlV2F0Y2guanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtZmllbGQtZm9ybS9lcy91dGlscy9OYW1lTWFwLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvdXRpbHMvYXN5bmNVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLWZpZWxkLWZvcm0vZXMvdXRpbHMvbWVzc2FnZXMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtZmllbGQtZm9ybS9lcy91dGlscy90eXBlVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1maWVsZC1mb3JtL2VzL3V0aWxzL3ZhbGlkYXRlVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1maWVsZC1mb3JtL2VzL3V0aWxzL3ZhbHVlVXRpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiYXJyb3dcIiwgXCJwcmVmaXhDbHNcIiwgXCJ0cmFuc2l0aW9uTmFtZVwiLCBcImFuaW1hdGlvblwiLCBcImFsaWduXCIsIFwicGxhY2VtZW50XCIsIFwicGxhY2VtZW50c1wiLCBcImdldFBvcHVwQ29udGFpbmVyXCIsIFwic2hvd0FjdGlvblwiLCBcImhpZGVBY3Rpb25cIiwgXCJvdmVybGF5Q2xhc3NOYW1lXCIsIFwib3ZlcmxheVN0eWxlXCIsIFwidmlzaWJsZVwiLCBcInRyaWdnZXJcIiwgXCJhdXRvRm9jdXNcIiwgXCJvdmVybGF5XCIsIFwiY2hpbGRyZW5cIiwgXCJvblZpc2libGVDaGFuZ2VcIl07XG5pbXBvcnQgVHJpZ2dlciBmcm9tICdAcmMtY29tcG9uZW50L3RyaWdnZXInO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjb21wb3NlUmVmLCBnZXROb2RlUmVmLCBzdXBwb3J0UmVmIH0gZnJvbSBcInJjLXV0aWwvZXMvcmVmXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUFjY2Vzc2liaWxpdHkgZnJvbSBcIi4vaG9va3MvdXNlQWNjZXNzaWJpbGl0eVwiO1xuaW1wb3J0IE92ZXJsYXkgZnJvbSBcIi4vT3ZlcmxheVwiO1xuaW1wb3J0IFBsYWNlbWVudHMgZnJvbSBcIi4vcGxhY2VtZW50c1wiO1xuZnVuY3Rpb24gRHJvcGRvd24ocHJvcHMsIHJlZikge1xuICB2YXIgX2NoaWxkcmVuJHByb3BzO1xuICB2YXIgX3Byb3BzJGFycm93ID0gcHJvcHMuYXJyb3csXG4gICAgYXJyb3cgPSBfcHJvcHMkYXJyb3cgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGFycm93LFxuICAgIF9wcm9wcyRwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgcHJlZml4Q2xzID0gX3Byb3BzJHByZWZpeENscyA9PT0gdm9pZCAwID8gJ3JjLWRyb3Bkb3duJyA6IF9wcm9wcyRwcmVmaXhDbHMsXG4gICAgdHJhbnNpdGlvbk5hbWUgPSBwcm9wcy50cmFuc2l0aW9uTmFtZSxcbiAgICBhbmltYXRpb24gPSBwcm9wcy5hbmltYXRpb24sXG4gICAgYWxpZ24gPSBwcm9wcy5hbGlnbixcbiAgICBfcHJvcHMkcGxhY2VtZW50ID0gcHJvcHMucGxhY2VtZW50LFxuICAgIHBsYWNlbWVudCA9IF9wcm9wcyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/ICdib3R0b21MZWZ0JyA6IF9wcm9wcyRwbGFjZW1lbnQsXG4gICAgX3Byb3BzJHBsYWNlbWVudHMgPSBwcm9wcy5wbGFjZW1lbnRzLFxuICAgIHBsYWNlbWVudHMgPSBfcHJvcHMkcGxhY2VtZW50cyA9PT0gdm9pZCAwID8gUGxhY2VtZW50cyA6IF9wcm9wcyRwbGFjZW1lbnRzLFxuICAgIGdldFBvcHVwQ29udGFpbmVyID0gcHJvcHMuZ2V0UG9wdXBDb250YWluZXIsXG4gICAgc2hvd0FjdGlvbiA9IHByb3BzLnNob3dBY3Rpb24sXG4gICAgaGlkZUFjdGlvbiA9IHByb3BzLmhpZGVBY3Rpb24sXG4gICAgb3ZlcmxheUNsYXNzTmFtZSA9IHByb3BzLm92ZXJsYXlDbGFzc05hbWUsXG4gICAgb3ZlcmxheVN0eWxlID0gcHJvcHMub3ZlcmxheVN0eWxlLFxuICAgIHZpc2libGUgPSBwcm9wcy52aXNpYmxlLFxuICAgIF9wcm9wcyR0cmlnZ2VyID0gcHJvcHMudHJpZ2dlcixcbiAgICB0cmlnZ2VyID0gX3Byb3BzJHRyaWdnZXIgPT09IHZvaWQgMCA/IFsnaG92ZXInXSA6IF9wcm9wcyR0cmlnZ2VyLFxuICAgIGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cyxcbiAgICBvdmVybGF5ID0gcHJvcHMub3ZlcmxheSxcbiAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIG9uVmlzaWJsZUNoYW5nZSA9IHByb3BzLm9uVmlzaWJsZUNoYW5nZSxcbiAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoKSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICB0cmlnZ2VyVmlzaWJsZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMF0sXG4gICAgc2V0VHJpZ2dlclZpc2libGUgPSBfUmVhY3QkdXNlU3RhdGUyWzFdO1xuICB2YXIgbWVyZ2VkVmlzaWJsZSA9ICd2aXNpYmxlJyBpbiBwcm9wcyA/IHZpc2libGUgOiB0cmlnZ2VyVmlzaWJsZTtcbiAgdmFyIHRyaWdnZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBvdmVybGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB2YXIgY2hpbGRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRyaWdnZXJSZWYuY3VycmVudDtcbiAgfSk7XG4gIHZhciBoYW5kbGVWaXNpYmxlQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlVmlzaWJsZUNoYW5nZShuZXdWaXNpYmxlKSB7XG4gICAgc2V0VHJpZ2dlclZpc2libGUobmV3VmlzaWJsZSk7XG4gICAgb25WaXNpYmxlQ2hhbmdlID09PSBudWxsIHx8IG9uVmlzaWJsZUNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uVmlzaWJsZUNoYW5nZShuZXdWaXNpYmxlKTtcbiAgfTtcbiAgdXNlQWNjZXNzaWJpbGl0eSh7XG4gICAgdmlzaWJsZTogbWVyZ2VkVmlzaWJsZSxcbiAgICB0cmlnZ2VyUmVmOiBjaGlsZFJlZixcbiAgICBvblZpc2libGVDaGFuZ2U6IGhhbmRsZVZpc2libGVDaGFuZ2UsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgb3ZlcmxheVJlZjogb3ZlcmxheVJlZlxuICB9KTtcbiAgdmFyIG9uQ2xpY2sgPSBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICB2YXIgb25PdmVybGF5Q2xpY2sgPSBwcm9wcy5vbk92ZXJsYXlDbGljaztcbiAgICBzZXRUcmlnZ2VyVmlzaWJsZShmYWxzZSk7XG4gICAgaWYgKG9uT3ZlcmxheUNsaWNrKSB7XG4gICAgICBvbk92ZXJsYXlDbGljayhlKTtcbiAgICB9XG4gIH07XG4gIHZhciBnZXRNZW51RWxlbWVudCA9IGZ1bmN0aW9uIGdldE1lbnVFbGVtZW50KCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPdmVybGF5LCB7XG4gICAgICByZWY6IG92ZXJsYXlSZWYsXG4gICAgICBvdmVybGF5OiBvdmVybGF5LFxuICAgICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgICBhcnJvdzogYXJyb3dcbiAgICB9KTtcbiAgfTtcbiAgdmFyIGdldE1lbnVFbGVtZW50T3JMYW1iZGEgPSBmdW5jdGlvbiBnZXRNZW51RWxlbWVudE9yTGFtYmRhKCkge1xuICAgIGlmICh0eXBlb2Ygb3ZlcmxheSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGdldE1lbnVFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TWVudUVsZW1lbnQoKTtcbiAgfTtcbiAgdmFyIGdldE1pbk92ZXJsYXlXaWR0aE1hdGNoVHJpZ2dlciA9IGZ1bmN0aW9uIGdldE1pbk92ZXJsYXlXaWR0aE1hdGNoVHJpZ2dlcigpIHtcbiAgICB2YXIgbWluT3ZlcmxheVdpZHRoTWF0Y2hUcmlnZ2VyID0gcHJvcHMubWluT3ZlcmxheVdpZHRoTWF0Y2hUcmlnZ2VyLFxuICAgICAgYWxpZ25Qb2ludCA9IHByb3BzLmFsaWduUG9pbnQ7XG4gICAgaWYgKCdtaW5PdmVybGF5V2lkdGhNYXRjaFRyaWdnZXInIGluIHByb3BzKSB7XG4gICAgICByZXR1cm4gbWluT3ZlcmxheVdpZHRoTWF0Y2hUcmlnZ2VyO1xuICAgIH1cbiAgICByZXR1cm4gIWFsaWduUG9pbnQ7XG4gIH07XG4gIHZhciBnZXRPcGVuQ2xhc3NOYW1lID0gZnVuY3Rpb24gZ2V0T3BlbkNsYXNzTmFtZSgpIHtcbiAgICB2YXIgb3BlbkNsYXNzTmFtZSA9IHByb3BzLm9wZW5DbGFzc05hbWU7XG4gICAgaWYgKG9wZW5DbGFzc05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9wZW5DbGFzc05hbWU7XG4gICAgfVxuICAgIHJldHVybiBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLW9wZW5cIik7XG4gIH07XG4gIHZhciBjaGlsZHJlbk5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKChfY2hpbGRyZW4kcHJvcHMgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2NoaWxkcmVuJHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2hpbGRyZW4kcHJvcHMuY2xhc3NOYW1lLCBtZXJnZWRWaXNpYmxlICYmIGdldE9wZW5DbGFzc05hbWUoKSksXG4gICAgcmVmOiBzdXBwb3J0UmVmKGNoaWxkcmVuKSA/IGNvbXBvc2VSZWYoY2hpbGRSZWYsIGdldE5vZGVSZWYoY2hpbGRyZW4pKSA6IHVuZGVmaW5lZFxuICB9KTtcbiAgdmFyIHRyaWdnZXJIaWRlQWN0aW9uID0gaGlkZUFjdGlvbjtcbiAgaWYgKCF0cmlnZ2VySGlkZUFjdGlvbiAmJiB0cmlnZ2VyLmluZGV4T2YoJ2NvbnRleHRNZW51JykgIT09IC0xKSB7XG4gICAgdHJpZ2dlckhpZGVBY3Rpb24gPSBbJ2NsaWNrJ107XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyaWdnZXIsIF9leHRlbmRzKHtcbiAgICBidWlsdGluUGxhY2VtZW50czogcGxhY2VtZW50c1xuICB9LCBvdGhlclByb3BzLCB7XG4gICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgcmVmOiB0cmlnZ2VyUmVmLFxuICAgIHBvcHVwQ2xhc3NOYW1lOiBjbGFzc05hbWVzKG92ZXJsYXlDbGFzc05hbWUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1zaG93LWFycm93XCIpLCBhcnJvdykpLFxuICAgIHBvcHVwU3R5bGU6IG92ZXJsYXlTdHlsZSxcbiAgICBhY3Rpb246IHRyaWdnZXIsXG4gICAgc2hvd0FjdGlvbjogc2hvd0FjdGlvbixcbiAgICBoaWRlQWN0aW9uOiB0cmlnZ2VySGlkZUFjdGlvbixcbiAgICBwb3B1cFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgIHBvcHVwQWxpZ246IGFsaWduLFxuICAgIHBvcHVwVHJhbnNpdGlvbk5hbWU6IHRyYW5zaXRpb25OYW1lLFxuICAgIHBvcHVwQW5pbWF0aW9uOiBhbmltYXRpb24sXG4gICAgcG9wdXBWaXNpYmxlOiBtZXJnZWRWaXNpYmxlLFxuICAgIHN0cmV0Y2g6IGdldE1pbk92ZXJsYXlXaWR0aE1hdGNoVHJpZ2dlcigpID8gJ21pbldpZHRoJyA6ICcnLFxuICAgIHBvcHVwOiBnZXRNZW51RWxlbWVudE9yTGFtYmRhKCksXG4gICAgb25Qb3B1cFZpc2libGVDaGFuZ2U6IGhhbmRsZVZpc2libGVDaGFuZ2UsXG4gICAgb25Qb3B1cENsaWNrOiBvbkNsaWNrLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lclxuICB9KSwgY2hpbGRyZW5Ob2RlKTtcbn1cbmV4cG9ydCBkZWZhdWx0IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKERyb3Bkb3duKTsiLCJpbXBvcnQgeyBjb21wb3NlUmVmLCBnZXROb2RlUmVmLCBzdXBwb3J0UmVmIH0gZnJvbSBcInJjLXV0aWwvZXMvcmVmXCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbnZhciBPdmVybGF5ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIG92ZXJsYXkgPSBwcm9wcy5vdmVybGF5LFxuICAgIGFycm93ID0gcHJvcHMuYXJyb3csXG4gICAgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzO1xuICB2YXIgb3ZlcmxheU5vZGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3ZlcmxheUVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiBvdmVybGF5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvdmVybGF5RWxlbWVudCA9IG92ZXJsYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3ZlcmxheUVsZW1lbnQgPSBvdmVybGF5O1xuICAgIH1cbiAgICByZXR1cm4gb3ZlcmxheUVsZW1lbnQ7XG4gIH0sIFtvdmVybGF5XSk7XG4gIHZhciBjb21wb3NlZFJlZiA9IGNvbXBvc2VSZWYocmVmLCBnZXROb2RlUmVmKG92ZXJsYXlOb2RlKSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgYXJyb3cgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1hcnJvd1wiKVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChvdmVybGF5Tm9kZSwge1xuICAgIHJlZjogc3VwcG9ydFJlZihvdmVybGF5Tm9kZSkgPyBjb21wb3NlZFJlZiA6IHVuZGVmaW5lZFxuICB9KSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7IiwiaW1wb3J0IEtleUNvZGUgZnJvbSBcInJjLXV0aWwvZXMvS2V5Q29kZVwiO1xuaW1wb3J0IHJhZiBmcm9tIFwicmMtdXRpbC9lcy9yYWZcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIEVTQyA9IEtleUNvZGUuRVNDLFxuICBUQUIgPSBLZXlDb2RlLlRBQjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUFjY2Vzc2liaWxpdHkoX3JlZikge1xuICB2YXIgdmlzaWJsZSA9IF9yZWYudmlzaWJsZSxcbiAgICB0cmlnZ2VyUmVmID0gX3JlZi50cmlnZ2VyUmVmLFxuICAgIG9uVmlzaWJsZUNoYW5nZSA9IF9yZWYub25WaXNpYmxlQ2hhbmdlLFxuICAgIGF1dG9Gb2N1cyA9IF9yZWYuYXV0b0ZvY3VzLFxuICAgIG92ZXJsYXlSZWYgPSBfcmVmLm92ZXJsYXlSZWY7XG4gIHZhciBmb2N1c01lbnVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgaGFuZGxlQ2xvc2VNZW51QW5kUmV0dXJuRm9jdXMgPSBmdW5jdGlvbiBoYW5kbGVDbG9zZU1lbnVBbmRSZXR1cm5Gb2N1cygpIHtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgdmFyIF90cmlnZ2VyUmVmJGN1cnJlbnQsIF90cmlnZ2VyUmVmJGN1cnJlbnQkZjtcbiAgICAgIChfdHJpZ2dlclJlZiRjdXJyZW50ID0gdHJpZ2dlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdHJpZ2dlclJlZiRjdXJyZW50ID09PSB2b2lkIDAgfHwgKF90cmlnZ2VyUmVmJGN1cnJlbnQkZiA9IF90cmlnZ2VyUmVmJGN1cnJlbnQuZm9jdXMpID09PSBudWxsIHx8IF90cmlnZ2VyUmVmJGN1cnJlbnQkZiA9PT0gdm9pZCAwIHx8IF90cmlnZ2VyUmVmJGN1cnJlbnQkZi5jYWxsKF90cmlnZ2VyUmVmJGN1cnJlbnQpO1xuICAgICAgb25WaXNpYmxlQ2hhbmdlID09PSBudWxsIHx8IG9uVmlzaWJsZUNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uVmlzaWJsZUNoYW5nZShmYWxzZSk7XG4gICAgfVxuICB9O1xuICB2YXIgZm9jdXNNZW51ID0gZnVuY3Rpb24gZm9jdXNNZW51KCkge1xuICAgIHZhciBfb3ZlcmxheVJlZiRjdXJyZW50O1xuICAgIGlmICgoX292ZXJsYXlSZWYkY3VycmVudCA9IG92ZXJsYXlSZWYuY3VycmVudCkgIT09IG51bGwgJiYgX292ZXJsYXlSZWYkY3VycmVudCAhPT0gdm9pZCAwICYmIF9vdmVybGF5UmVmJGN1cnJlbnQuZm9jdXMpIHtcbiAgICAgIG92ZXJsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgZm9jdXNNZW51UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgdmFyIGhhbmRsZUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIEVTQzpcbiAgICAgICAgaGFuZGxlQ2xvc2VNZW51QW5kUmV0dXJuRm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRBQjpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBmb2N1c1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGlmICghZm9jdXNNZW51UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZvY3VzUmVzdWx0ID0gZm9jdXNNZW51KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb2N1c1Jlc3VsdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlQ2xvc2VNZW51QW5kUmV0dXJuRm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcbiAgICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgICAgLy8gRklYTUU6IGhhY2sgd2l0aCByYWZcbiAgICAgICAgcmFmKGZvY3VzTWVudSwgMyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgICAgIGZvY3VzTWVudVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9jdXNNZW51UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbdmlzaWJsZV0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xufSIsImltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd247IiwidmFyIGF1dG9BZGp1c3RPdmVyZmxvdyA9IHtcbiAgYWRqdXN0WDogMSxcbiAgYWRqdXN0WTogMVxufTtcbnZhciB0YXJnZXRPZmZzZXQgPSBbMCwgMF07XG52YXIgcGxhY2VtZW50cyA9IHtcbiAgdG9wTGVmdDoge1xuICAgIHBvaW50czogWydibCcsICd0bCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3csXG4gICAgb2Zmc2V0OiBbMCwgLTRdLFxuICAgIHRhcmdldE9mZnNldDogdGFyZ2V0T2Zmc2V0XG4gIH0sXG4gIHRvcDoge1xuICAgIHBvaW50czogWydiYycsICd0YyddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3csXG4gICAgb2Zmc2V0OiBbMCwgLTRdLFxuICAgIHRhcmdldE9mZnNldDogdGFyZ2V0T2Zmc2V0XG4gIH0sXG4gIHRvcFJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ2JyJywgJ3RyJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvdyxcbiAgICBvZmZzZXQ6IFswLCAtNF0sXG4gICAgdGFyZ2V0T2Zmc2V0OiB0YXJnZXRPZmZzZXRcbiAgfSxcbiAgYm90dG9tTGVmdDoge1xuICAgIHBvaW50czogWyd0bCcsICdibCddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3csXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgdGFyZ2V0T2Zmc2V0OiB0YXJnZXRPZmZzZXRcbiAgfSxcbiAgYm90dG9tOiB7XG4gICAgcG9pbnRzOiBbJ3RjJywgJ2JjJ10sXG4gICAgb3ZlcmZsb3c6IGF1dG9BZGp1c3RPdmVyZmxvdyxcbiAgICBvZmZzZXQ6IFswLCA0XSxcbiAgICB0YXJnZXRPZmZzZXQ6IHRhcmdldE9mZnNldFxuICB9LFxuICBib3R0b21SaWdodDoge1xuICAgIHBvaW50czogWyd0cicsICdiciddLFxuICAgIG92ZXJmbG93OiBhdXRvQWRqdXN0T3ZlcmZsb3csXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgdGFyZ2V0T2Zmc2V0OiB0YXJnZXRPZmZzZXRcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHBsYWNlbWVudHM7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZVwiO1xuaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yXCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZVN1cGVyXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xudmFyIF9leGNsdWRlZCA9IFtcIm5hbWVcIl07XG5pbXBvcnQgdG9DaGlsZHJlbkFycmF5IGZyb20gXCJyYy11dGlsL2VzL0NoaWxkcmVuL3RvQXJyYXlcIjtcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJyYy11dGlsL2VzL2lzRXF1YWxcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGaWVsZENvbnRleHQsIHsgSE9PS19NQVJLIH0gZnJvbSBcIi4vRmllbGRDb250ZXh0XCI7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSBcIi4vTGlzdENvbnRleHRcIjtcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tIFwiLi91dGlscy90eXBlVXRpbFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVSdWxlcyB9IGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRlVXRpbFwiO1xuaW1wb3J0IHsgY29udGFpbnNOYW1lUGF0aCwgZGVmYXVsdEdldFZhbHVlRnJvbUV2ZW50LCBnZXROYW1lUGF0aCwgZ2V0VmFsdWUgfSBmcm9tIFwiLi91dGlscy92YWx1ZVV0aWxcIjtcbnZhciBFTVBUWV9FUlJPUlMgPSBbXTtcbmZ1bmN0aW9uIHJlcXVpcmVVcGRhdGUoc2hvdWxkVXBkYXRlLCBwcmV2LCBuZXh0LCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgaW5mbykge1xuICBpZiAodHlwZW9mIHNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRVcGRhdGUocHJldiwgbmV4dCwgJ3NvdXJjZScgaW4gaW5mbyA/IHtcbiAgICAgIHNvdXJjZTogaW5mby5zb3VyY2VcbiAgICB9IDoge30pO1xuICB9XG4gIHJldHVybiBwcmV2VmFsdWUgIT09IG5leHRWYWx1ZTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LWluZGV4ZWQtb2JqZWN0LXN0eWxlXG4vLyBXZSB1c2UgQ2xhc3MgaW5zdGVhZCBvZiBIb29rcyBoZXJlIHNpbmNlIGl0IHdpbGwgY29zdCBtdWNoIGNvZGUgYnkgdXNpbmcgSG9va3MuXG52YXIgRmllbGQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEZpZWxkLCBfUmVhY3QkQ29tcG9uZW50KTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihGaWVsZCk7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdWJzY3JpcHRpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBGaWVsZChwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gUmVnaXN0ZXIgb24gaW5pdFxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICByZXNldENvdW50OiAwXG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNhbmNlbFJlZ2lzdGVyRnVuY1wiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibW91bnRlZFwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogRm9sbG93IHN0YXRlIHNob3VsZCBub3QgbWFuYWdlbWVudCBpbiBTdGF0ZSBzaW5jZSBpdCB3aWxsIGFzeW5jIHVwZGF0ZSBieSBSZWFjdC5cbiAgICAgKiBUaGlzIG1ha2VzIGZpcnN0IHJlbmRlciBvZiBmb3JtIGNhbiBub3QgZ2V0IGNvcnJlY3Qgc3RhdGUgdmFsdWUuXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRvdWNoZWRcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIE1hcmsgd2hlbiB0b3VjaGVkICYgdmFsaWRhdGVkLiBDdXJyZW50bHkgb25seSB1c2VkIGZvciBgZGVwZW5kZW5jaWVzYC5cbiAgICAgKiBOb3RlIHRoYXQgd2UgZG8gbm90IHRoaW5rIGZpZWxkIHdpdGggYGluaXRpYWxWYWx1ZWAgaXMgZGlydHlcbiAgICAgKiBidXQgdGhpcyB3aWxsIGJlIGJ5IGBpc0ZpZWxkRGlydHlgIGZ1bmMuXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRpcnR5XCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidmFsaWRhdGVQcm9taXNlXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByZXZWYWxpZGF0aW5nXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImVycm9yc1wiLCBFTVBUWV9FUlJPUlMpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ3YXJuaW5nc1wiLCBFTVBUWV9FUlJPUlMpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjYW5jZWxSZWdpc3RlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgcHJlc2VydmUgPSBfdGhpcyRwcm9wcy5wcmVzZXJ2ZSxcbiAgICAgICAgaXNMaXN0RmllbGQgPSBfdGhpcyRwcm9wcy5pc0xpc3RGaWVsZCxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzLm5hbWU7XG4gICAgICBpZiAoX3RoaXMuY2FuY2VsUmVnaXN0ZXJGdW5jKSB7XG4gICAgICAgIF90aGlzLmNhbmNlbFJlZ2lzdGVyRnVuYyhpc0xpc3RGaWVsZCwgcHJlc2VydmUsIGdldE5hbWVQYXRoKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIF90aGlzLmNhbmNlbFJlZ2lzdGVyRnVuYyA9IG51bGw7XG4gICAgfSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBVdGlscyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldE5hbWVQYXRoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMi5uYW1lLFxuICAgICAgICBmaWVsZENvbnRleHQgPSBfdGhpcyRwcm9wczIuZmllbGRDb250ZXh0O1xuICAgICAgdmFyIF9maWVsZENvbnRleHQkcHJlZml4TiA9IGZpZWxkQ29udGV4dC5wcmVmaXhOYW1lLFxuICAgICAgICBwcmVmaXhOYW1lID0gX2ZpZWxkQ29udGV4dCRwcmVmaXhOID09PSB2b2lkIDAgPyBbXSA6IF9maWVsZENvbnRleHQkcHJlZml4TjtcbiAgICAgIHJldHVybiBuYW1lICE9PSB1bmRlZmluZWQgPyBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZWZpeE5hbWUpLCBfdG9Db25zdW1hYmxlQXJyYXkobmFtZSkpIDogW107XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldFJ1bGVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMzJHJ1bGVzID0gX3RoaXMkcHJvcHMzLnJ1bGVzLFxuICAgICAgICBydWxlcyA9IF90aGlzJHByb3BzMyRydWxlcyA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wczMkcnVsZXMsXG4gICAgICAgIGZpZWxkQ29udGV4dCA9IF90aGlzJHByb3BzMy5maWVsZENvbnRleHQ7XG4gICAgICByZXR1cm4gcnVsZXMubWFwKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBydWxlKGZpZWxkQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVmcmVzaFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLm1vdW50ZWQpIHJldHVybjtcblxuICAgICAgLyoqXG4gICAgICAgKiBDbGVhbiB1cCBjdXJyZW50IG5vZGUuXG4gICAgICAgKi9cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciByZXNldENvdW50ID0gX3JlZi5yZXNldENvdW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0Q291bnQ6IHJlc2V0Q291bnQgKyAxXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBFdmVudCBzaG91bGQgb25seSB0cmlnZ2VyIHdoZW4gbWV0YSBjaGFuZ2VkXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm1ldGFDYWNoZVwiLCBudWxsKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidHJpZ2dlck1ldGFFdmVudFwiLCBmdW5jdGlvbiAoZGVzdHJveSkge1xuICAgICAgdmFyIG9uTWV0YUNoYW5nZSA9IF90aGlzLnByb3BzLm9uTWV0YUNoYW5nZTtcbiAgICAgIGlmIChvbk1ldGFDaGFuZ2UpIHtcbiAgICAgICAgdmFyIF9tZXRhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5nZXRNZXRhKCkpLCB7fSwge1xuICAgICAgICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNFcXVhbChfdGhpcy5tZXRhQ2FjaGUsIF9tZXRhKSkge1xuICAgICAgICAgIG9uTWV0YUNoYW5nZShfbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMubWV0YUNhY2hlID0gX21ldGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5tZXRhQ2FjaGUgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gRmllbGQgRW50aXR5IEludGVyZmFjZXMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFRyaWdnZXIgYnkgc3RvcmUgdXBkYXRlLiBDaGVjayBpZiBuZWVkIHVwZGF0ZSB0aGUgY29tcG9uZW50XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU3RvcmVDaGFuZ2VcIiwgZnVuY3Rpb24gKHByZXZTdG9yZSwgbmFtZVBhdGhMaXN0LCBpbmZvKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIHNob3VsZFVwZGF0ZSA9IF90aGlzJHByb3BzNC5zaG91bGRVcGRhdGUsXG4gICAgICAgIF90aGlzJHByb3BzNCRkZXBlbmRlbiA9IF90aGlzJHByb3BzNC5kZXBlbmRlbmNpZXMsXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IF90aGlzJHByb3BzNCRkZXBlbmRlbiA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wczQkZGVwZW5kZW4sXG4gICAgICAgIG9uUmVzZXQgPSBfdGhpcyRwcm9wczQub25SZXNldDtcbiAgICAgIHZhciBzdG9yZSA9IGluZm8uc3RvcmU7XG4gICAgICB2YXIgbmFtZVBhdGggPSBfdGhpcy5nZXROYW1lUGF0aCgpO1xuICAgICAgdmFyIHByZXZWYWx1ZSA9IF90aGlzLmdldFZhbHVlKHByZXZTdG9yZSk7XG4gICAgICB2YXIgY3VyVmFsdWUgPSBfdGhpcy5nZXRWYWx1ZShzdG9yZSk7XG4gICAgICB2YXIgbmFtZVBhdGhNYXRjaCA9IG5hbWVQYXRoTGlzdCAmJiBjb250YWluc05hbWVQYXRoKG5hbWVQYXRoTGlzdCwgbmFtZVBhdGgpO1xuXG4gICAgICAvLyBgc2V0RmllbGRzVmFsdWVgIGlzIGEgcXVpY2sgYWNjZXNzIHRvIHVwZGF0ZSByZWxhdGVkIHN0YXR1c1xuICAgICAgaWYgKGluZm8udHlwZSA9PT0gJ3ZhbHVlVXBkYXRlJyAmJiBpbmZvLnNvdXJjZSA9PT0gJ2V4dGVybmFsJyAmJiAhaXNFcXVhbChwcmV2VmFsdWUsIGN1clZhbHVlKSkge1xuICAgICAgICBfdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICBfdGhpcy52YWxpZGF0ZVByb21pc2UgPSBudWxsO1xuICAgICAgICBfdGhpcy5lcnJvcnMgPSBFTVBUWV9FUlJPUlM7XG4gICAgICAgIF90aGlzLndhcm5pbmdzID0gRU1QVFlfRVJST1JTO1xuICAgICAgICBfdGhpcy50cmlnZ2VyTWV0YUV2ZW50KCk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGluZm8udHlwZSkge1xuICAgICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgICAgaWYgKCFuYW1lUGF0aExpc3QgfHwgbmFtZVBhdGhNYXRjaCkge1xuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgc3RhdGVcbiAgICAgICAgICAgIF90aGlzLnRvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICBfdGhpcy52YWxpZGF0ZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfdGhpcy5lcnJvcnMgPSBFTVBUWV9FUlJPUlM7XG4gICAgICAgICAgICBfdGhpcy53YXJuaW5ncyA9IEVNUFRZX0VSUk9SUztcbiAgICAgICAgICAgIF90aGlzLnRyaWdnZXJNZXRhRXZlbnQoKTtcbiAgICAgICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwIHx8IG9uUmVzZXQoKTtcbiAgICAgICAgICAgIF90aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluIGNhc2UgZmllbGQgd2l0aCBgcHJlc2VydmUgPSBmYWxzZWAgbmVzdCBkZXBzIGxpa2U6XG4gICAgICAgICAqIC0gQSA9IDEgPT4gc2hvdyBCXG4gICAgICAgICAqIC0gQiA9IDEgPT4gc2hvdyBDXG4gICAgICAgICAqIC0gUmVzZXQgQSwgbmVlZCBjbGVhbiBCLCBDXG4gICAgICAgICAqL1xuICAgICAgICBjYXNlICdyZW1vdmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGUgJiYgcmVxdWlyZVVwZGF0ZShzaG91bGRVcGRhdGUsIHByZXZTdG9yZSwgc3RvcmUsIHByZXZWYWx1ZSwgY3VyVmFsdWUsIGluZm8pKSB7XG4gICAgICAgICAgICAgIF90aGlzLnJlUmVuZGVyKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnc2V0RmllbGQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gaW5mby5kYXRhO1xuICAgICAgICAgICAgaWYgKG5hbWVQYXRoTWF0Y2gpIHtcbiAgICAgICAgICAgICAgaWYgKCd0b3VjaGVkJyBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudG91Y2hlZCA9IGRhdGEudG91Y2hlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoJ3ZhbGlkYXRpbmcnIGluIGRhdGEgJiYgISgnb3JpZ2luUkNGaWVsZCcgaW4gZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52YWxpZGF0ZVByb21pc2UgPSBkYXRhLnZhbGlkYXRpbmcgPyBQcm9taXNlLnJlc29sdmUoW10pIDogbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoJ2Vycm9ycycgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIF90aGlzLmVycm9ycyA9IGRhdGEuZXJyb3JzIHx8IEVNUFRZX0VSUk9SUztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoJ3dhcm5pbmdzJyBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMud2FybmluZ3MgPSBkYXRhLndhcm5pbmdzIHx8IEVNUFRZX0VSUk9SUztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgIF90aGlzLnRyaWdnZXJNZXRhRXZlbnQoKTtcbiAgICAgICAgICAgICAgX3RoaXMucmVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgndmFsdWUnIGluIGRhdGEgJiYgY29udGFpbnNOYW1lUGF0aChuYW1lUGF0aExpc3QsIG5hbWVQYXRoLCB0cnVlKSkge1xuICAgICAgICAgICAgICAvLyBDb250YWlucyBwYXRoIHdpdGggdmFsdWUgc2hvdWxkIGFsc28gY2hlY2tcbiAgICAgICAgICAgICAgX3RoaXMucmVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYW5kbGUgdXBkYXRlIGJ5IGBzZXRGaWVsZGAgd2l0aCBgc2hvdWxkVXBkYXRlYFxuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSAmJiAhbmFtZVBhdGgubGVuZ3RoICYmIHJlcXVpcmVVcGRhdGUoc2hvdWxkVXBkYXRlLCBwcmV2U3RvcmUsIHN0b3JlLCBwcmV2VmFsdWUsIGN1clZhbHVlLCBpbmZvKSkge1xuICAgICAgICAgICAgICBfdGhpcy5yZVJlbmRlcigpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2RlcGVuZGVuY2llc1VwZGF0ZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmlnZ2VyIHdoZW4gbWFya2VkIGBkZXBlbmRlbmNpZXNgIHVwZGF0ZWQuIFJlbGF0ZWQgZmllbGRzIHdpbGwgYWxsIHVwZGF0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgZGVwZW5kZW5jeUxpc3QgPSBkZXBlbmRlbmNpZXMubWFwKGdldE5hbWVQYXRoKTtcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9yIGBuYW1lUGF0aE1hdGhgIGNoZWNrIGFuZCBgc2hvdWxkVXBkYXRlYCBjaGVjaywgc2luY2UgYHZhbHVlVXBkYXRlYCB3aWxsIGJlXG4gICAgICAgICAgICAvLyBlbWl0dGVkIGVhcmxpZXIgYW5kIHRoZXkgd2lsbCB3b3JrIHRoZXJlXG4gICAgICAgICAgICAvLyBJZiBzZXQgaXQgbWF5IGNhdXNlIHVubmVjZXNzYXJ5IHR3aWNlIHJlcmVuZGVyaW5nXG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jeUxpc3Quc29tZShmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnNOYW1lUGF0aChpbmZvLnJlbGF0ZWRGaWVsZHMsIGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgX3RoaXMucmVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIDEuIElmIGBuYW1lUGF0aGAgZXhpc3RzIGluIGBuYW1lUGF0aExpc3RgLCBtZWFucyBpdCdzIHJlbGF0ZWQgdmFsdWUgYW5kIHNob3VsZCB1cGRhdGVcbiAgICAgICAgICAvLyAgICAgIEZvciBleGFtcGxlIDxMaXN0IG5hbWU9XCJsaXN0XCI+PEZpZWxkIG5hbWU9e1snbGlzdCcsIDBdfT48L0xpc3Q+XG4gICAgICAgICAgLy8gICAgICBJZiBgbmFtZVBhdGhMaXN0YCBpcyBbWydsaXN0J11dIChMaXN0IHZhbHVlIHVwZGF0ZSksIEZpZWxkIHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICAgICAgLy8gICAgICBJZiBgbmFtZVBhdGhMaXN0YCBpcyBbWydsaXN0JywgMF1dIChGaWVsZCB2YWx1ZSB1cGRhdGUpLCBMaXN0IHNob3VsZG4ndCBiZSB1cGRhdGVkXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICAvLyAgIDIuMSBJZiBgZGVwZW5kZW5jaWVzYCBpcyBzZXQsIGBuYW1lYCBpcyBub3Qgc2V0IGFuZCBgc2hvdWxkVXBkYXRlYCBpcyBub3Qgc2V0LFxuICAgICAgICAgIC8vICAgICAgIGRvbid0IHVzZSBgc2hvdWxkVXBkYXRlYC4gYGRlcGVuZGVuY2llc2AgaXMgdmlldyBhcyBhIHNob3J0Y3V0IGlmIGBzaG91bGRVcGRhdGVgXG4gICAgICAgICAgLy8gICAgICAgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgLy8gICAyLjIgSWYgYHNob3VsZFVwZGF0ZWAgcHJvdmlkZWQsIHVzZSBjdXN0b21pemUgbG9naWMgdG8gdXBkYXRlIHRoZSBmaWVsZFxuICAgICAgICAgIC8vICAgICAgIGVsc2UgdG8gY2hlY2sgaWYgdmFsdWUgY2hhbmdlZFxuICAgICAgICAgIGlmIChuYW1lUGF0aE1hdGNoIHx8ICghZGVwZW5kZW5jaWVzLmxlbmd0aCB8fCBuYW1lUGF0aC5sZW5ndGggfHwgc2hvdWxkVXBkYXRlKSAmJiByZXF1aXJlVXBkYXRlKHNob3VsZFVwZGF0ZSwgcHJldlN0b3JlLCBzdG9yZSwgcHJldlZhbHVlLCBjdXJWYWx1ZSwgaW5mbykpIHtcbiAgICAgICAgICAgIF90aGlzLnJlUmVuZGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBfdGhpcy5yZVJlbmRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ2YWxpZGF0ZVJ1bGVzXCIsIGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBXZSBzaG91bGQgZml4ZWQgbmFtZVBhdGggJiB2YWx1ZSB0byBhdm9pZCBkZXZlbG9wZXIgY2hhbmdlIHRoZW4gYnkgZm9ybSBmdW5jdGlvblxuICAgICAgdmFyIG5hbWVQYXRoID0gX3RoaXMuZ2V0TmFtZVBhdGgoKTtcbiAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBfdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdHJpZ2dlck5hbWUgPSBfcmVmMi50cmlnZ2VyTmFtZSxcbiAgICAgICAgX3JlZjIkdmFsaWRhdGVPbmx5ID0gX3JlZjIudmFsaWRhdGVPbmx5LFxuICAgICAgICB2YWxpZGF0ZU9ubHkgPSBfcmVmMiR2YWxpZGF0ZU9ubHkgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkdmFsaWRhdGVPbmx5O1xuXG4gICAgICAvLyBGb3JjZSBjaGFuZ2UgdG8gYXN5bmMgdG8gYXZvaWQgcnVsZSBPT0QgdW5kZXIgcmVuZGVyUHJvcHMgZmllbGRcbiAgICAgIHZhciByb290UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oIC8qI19fUFVSRV9fKi9fYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wczUsIF90aGlzJHByb3BzNSR2YWxpZGF0ZSwgdmFsaWRhdGVGaXJzdCwgbWVzc2FnZVZhcmlhYmxlcywgdmFsaWRhdGVEZWJvdW5jZSwgZmlsdGVyZWRSdWxlcywgcHJvbWlzZTtcbiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgaWYgKF90aGlzLm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIFtdKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsIF90aGlzJHByb3BzNSR2YWxpZGF0ZSA9IF90aGlzJHByb3BzNS52YWxpZGF0ZUZpcnN0LCB2YWxpZGF0ZUZpcnN0ID0gX3RoaXMkcHJvcHM1JHZhbGlkYXRlID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzNSR2YWxpZGF0ZSwgbWVzc2FnZVZhcmlhYmxlcyA9IF90aGlzJHByb3BzNS5tZXNzYWdlVmFyaWFibGVzLCB2YWxpZGF0ZURlYm91bmNlID0gX3RoaXMkcHJvcHM1LnZhbGlkYXRlRGVib3VuY2U7IC8vIFN0YXJ0IHZhbGlkYXRlXG4gICAgICAgICAgICAgIGZpbHRlcmVkUnVsZXMgPSBfdGhpcy5nZXRSdWxlcygpO1xuICAgICAgICAgICAgICBpZiAodHJpZ2dlck5hbWUpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJ1bGVzID0gZmlsdGVyZWRSdWxlcy5maWx0ZXIoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgICAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkYXRlVHJpZ2dlciA9IHJ1bGUudmFsaWRhdGVUcmlnZ2VyO1xuICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlckxpc3QgPSB0b0FycmF5KHZhbGlkYXRlVHJpZ2dlcik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJpZ2dlckxpc3QuaW5jbHVkZXModHJpZ2dlck5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgZGVib3VuY2UuIFNraXAgaWYgbm8gYHRyaWdnZXJOYW1lYCBzaW5jZSBpdHMgZnJvbSBgdmFsaWRhdGVGaWVsZHMgLyBzdWJtaXRgXG4gICAgICAgICAgICAgIGlmICghKHZhbGlkYXRlRGVib3VuY2UgJiYgdHJpZ2dlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA4O1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHZhbGlkYXRlRGVib3VuY2UpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgaWYgKCEoX3RoaXMudmFsaWRhdGVQcm9taXNlICE9PSByb290UHJvbWlzZSkpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBbXSk7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICBwcm9taXNlID0gdmFsaWRhdGVSdWxlcyhuYW1lUGF0aCwgY3VycmVudFZhbHVlLCBmaWx0ZXJlZFJ1bGVzLCBvcHRpb25zLCB2YWxpZGF0ZUZpcnN0LCBtZXNzYWdlVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgcHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZUVycm9ycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogRU1QVFlfRVJST1JTO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy52YWxpZGF0ZVByb21pc2UgPT09IHJvb3RQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgX3J1bGVFcnJvcnMkZm9yRWFjaDtcbiAgICAgICAgICAgICAgICAgIF90aGlzLnZhbGlkYXRlUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgIC8vIEdldCBlcnJvcnMgJiB3YXJuaW5nc1xuICAgICAgICAgICAgICAgICAgdmFyIG5leHRFcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBuZXh0V2FybmluZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgIChfcnVsZUVycm9ycyRmb3JFYWNoID0gcnVsZUVycm9ycy5mb3JFYWNoKSA9PT0gbnVsbCB8fCBfcnVsZUVycm9ycyRmb3JFYWNoID09PSB2b2lkIDAgfHwgX3J1bGVFcnJvcnMkZm9yRWFjaC5jYWxsKHJ1bGVFcnJvcnMsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2FybmluZ09ubHkgPSBfcmVmNC5ydWxlLndhcm5pbmdPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JGVycm9ycyA9IF9yZWY0LmVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfcmVmNCRlcnJvcnMgPT09IHZvaWQgMCA/IEVNUFRZX0VSUk9SUyA6IF9yZWY0JGVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdhcm5pbmdPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFdhcm5pbmdzLnB1c2guYXBwbHkobmV4dFdhcm5pbmdzLCBfdG9Db25zdW1hYmxlQXJyYXkoZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dEVycm9ycy5wdXNoLmFwcGx5KG5leHRFcnJvcnMsIF90b0NvbnN1bWFibGVBcnJheShlcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBfdGhpcy5lcnJvcnMgPSBuZXh0RXJyb3JzO1xuICAgICAgICAgICAgICAgICAgX3RoaXMud2FybmluZ3MgPSBuZXh0V2FybmluZ3M7XG4gICAgICAgICAgICAgICAgICBfdGhpcy50cmlnZ2VyTWV0YUV2ZW50KCk7XG4gICAgICAgICAgICAgICAgICBfdGhpcy5yZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgcHJvbWlzZSk7XG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgX2NhbGxlZSk7XG4gICAgICB9KSkpO1xuICAgICAgaWYgKHZhbGlkYXRlT25seSkge1xuICAgICAgICByZXR1cm4gcm9vdFByb21pc2U7XG4gICAgICB9XG4gICAgICBfdGhpcy52YWxpZGF0ZVByb21pc2UgPSByb290UHJvbWlzZTtcbiAgICAgIF90aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgIF90aGlzLmVycm9ycyA9IEVNUFRZX0VSUk9SUztcbiAgICAgIF90aGlzLndhcm5pbmdzID0gRU1QVFlfRVJST1JTO1xuICAgICAgX3RoaXMudHJpZ2dlck1ldGFFdmVudCgpO1xuXG4gICAgICAvLyBGb3JjZSB0cmlnZ2VyIHJlLXJlbmRlciBzaW5jZSB3ZSBuZWVkIHN5bmMgcmVuZGVyUHJvcHMgd2l0aCBuZXcgbWV0YVxuICAgICAgX3RoaXMucmVSZW5kZXIoKTtcbiAgICAgIHJldHVybiByb290UHJvbWlzZTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNGaWVsZFZhbGlkYXRpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICEhX3RoaXMudmFsaWRhdGVQcm9taXNlO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc0ZpZWxkVG91Y2hlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMudG91Y2hlZDtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNGaWVsZERpcnR5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRvdWNoZWQgb3IgdmFsaWRhdGUgb3IgaGFzIGluaXRpYWxWYWx1ZVxuICAgICAgaWYgKF90aGlzLmRpcnR5IHx8IF90aGlzLnByb3BzLmluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3JtIHNldCBpbml0aWFsVmFsdWVcbiAgICAgIHZhciBmaWVsZENvbnRleHQgPSBfdGhpcy5wcm9wcy5maWVsZENvbnRleHQ7XG4gICAgICB2YXIgX2ZpZWxkQ29udGV4dCRnZXRJbnRlID0gZmllbGRDb250ZXh0LmdldEludGVybmFsSG9va3MoSE9PS19NQVJLKSxcbiAgICAgICAgZ2V0SW5pdGlhbFZhbHVlID0gX2ZpZWxkQ29udGV4dCRnZXRJbnRlLmdldEluaXRpYWxWYWx1ZTtcbiAgICAgIGlmIChnZXRJbml0aWFsVmFsdWUoX3RoaXMuZ2V0TmFtZVBhdGgoKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0RXJyb3JzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5lcnJvcnM7XG4gICAgfSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldFdhcm5pbmdzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy53YXJuaW5ncztcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNMaXN0RmllbGRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLmlzTGlzdEZpZWxkO1xuICAgIH0pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc0xpc3RcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLmlzTGlzdDtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNQcmVzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMucHJlc2VydmU7XG4gICAgfSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ2hpbGQgQ29tcG9uZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImdldE1ldGFcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTWFrZSBlcnJvciAmIHZhbGlkYXRpbmcgaW4gY2FjaGUgdG8gc2F2ZSBwZXJmXG4gICAgICBfdGhpcy5wcmV2VmFsaWRhdGluZyA9IF90aGlzLmlzRmllbGRWYWxpZGF0aW5nKCk7XG4gICAgICB2YXIgbWV0YSA9IHtcbiAgICAgICAgdG91Y2hlZDogX3RoaXMuaXNGaWVsZFRvdWNoZWQoKSxcbiAgICAgICAgdmFsaWRhdGluZzogX3RoaXMucHJldlZhbGlkYXRpbmcsXG4gICAgICAgIGVycm9yczogX3RoaXMuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogX3RoaXMud2FybmluZ3MsXG4gICAgICAgIG5hbWU6IF90aGlzLmdldE5hbWVQYXRoKCksXG4gICAgICAgIHZhbGlkYXRlZDogX3RoaXMudmFsaWRhdGVQcm9taXNlID09PSBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1ldGE7XG4gICAgfSk7XG4gICAgLy8gT25seSByZXR1cm4gdmFsaWRhdGUgY2hpbGQgbm9kZS4gSWYgaW52YWxpZGF0ZSwgd2lsbCBkbyBub3RoaW5nIGFib3V0IGZpZWxkLlxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRPbmx5Q2hpbGRcIiwgZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAvLyBTdXBwb3J0IHJlbmRlciBwcm9wc1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX21ldGEyID0gX3RoaXMuZ2V0TWV0YSgpO1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5nZXRPbmx5Q2hpbGQoY2hpbGRyZW4oX3RoaXMuZ2V0Q29udHJvbGxlZCgpLCBfbWV0YTIsIF90aGlzLnByb3BzLmZpZWxkQ29udGV4dCkpKSwge30sIHtcbiAgICAgICAgICBpc0Z1bmN0aW9uOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBGaWxlZCBlbGVtZW50IG9ubHlcbiAgICAgIHZhciBjaGlsZExpc3QgPSB0b0NoaWxkcmVuQXJyYXkoY2hpbGRyZW4pO1xuICAgICAgaWYgKGNoaWxkTGlzdC5sZW5ndGggIT09IDEgfHwgISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRMaXN0WzBdKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkOiBjaGlsZExpc3QsXG4gICAgICAgICAgaXNGdW5jdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkOiBjaGlsZExpc3RbMF0sXG4gICAgICAgIGlzRnVuY3Rpb246IGZhbHNlXG4gICAgICB9O1xuICAgIH0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBGaWVsZCBDb250cm9sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRWYWx1ZVwiLCBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgICAgIHZhciBnZXRGaWVsZHNWYWx1ZSA9IF90aGlzLnByb3BzLmZpZWxkQ29udGV4dC5nZXRGaWVsZHNWYWx1ZTtcbiAgICAgIHZhciBuYW1lUGF0aCA9IF90aGlzLmdldE5hbWVQYXRoKCk7XG4gICAgICByZXR1cm4gZ2V0VmFsdWUoc3RvcmUgfHwgZ2V0RmllbGRzVmFsdWUodHJ1ZSksIG5hbWVQYXRoKTtcbiAgICB9KTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0Q29udHJvbGxlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hpbGRQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczYubmFtZSxcbiAgICAgICAgdHJpZ2dlciA9IF90aGlzJHByb3BzNi50cmlnZ2VyLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIgPSBfdGhpcyRwcm9wczYudmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICBnZXRWYWx1ZUZyb21FdmVudCA9IF90aGlzJHByb3BzNi5nZXRWYWx1ZUZyb21FdmVudCxcbiAgICAgICAgbm9ybWFsaXplID0gX3RoaXMkcHJvcHM2Lm5vcm1hbGl6ZSxcbiAgICAgICAgdmFsdWVQcm9wTmFtZSA9IF90aGlzJHByb3BzNi52YWx1ZVByb3BOYW1lLFxuICAgICAgICBnZXRWYWx1ZVByb3BzID0gX3RoaXMkcHJvcHM2LmdldFZhbHVlUHJvcHMsXG4gICAgICAgIGZpZWxkQ29udGV4dCA9IF90aGlzJHByb3BzNi5maWVsZENvbnRleHQ7XG4gICAgICB2YXIgbWVyZ2VkVmFsaWRhdGVUcmlnZ2VyID0gdmFsaWRhdGVUcmlnZ2VyICE9PSB1bmRlZmluZWQgPyB2YWxpZGF0ZVRyaWdnZXIgOiBmaWVsZENvbnRleHQudmFsaWRhdGVUcmlnZ2VyO1xuICAgICAgdmFyIG5hbWVQYXRoID0gX3RoaXMuZ2V0TmFtZVBhdGgoKTtcbiAgICAgIHZhciBnZXRJbnRlcm5hbEhvb2tzID0gZmllbGRDb250ZXh0LmdldEludGVybmFsSG9va3MsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlID0gZmllbGRDb250ZXh0LmdldEZpZWxkc1ZhbHVlO1xuICAgICAgdmFyIF9nZXRJbnRlcm5hbEhvb2tzID0gZ2V0SW50ZXJuYWxIb29rcyhIT09LX01BUkspLFxuICAgICAgICBkaXNwYXRjaCA9IF9nZXRJbnRlcm5hbEhvb2tzLmRpc3BhdGNoO1xuICAgICAgdmFyIHZhbHVlID0gX3RoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIHZhciBtZXJnZWRHZXRWYWx1ZVByb3BzID0gZ2V0VmFsdWVQcm9wcyB8fCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIHZhbHVlUHJvcE5hbWUsIHZhbCk7XG4gICAgICB9O1xuICAgICAgdmFyIG9yaWdpblRyaWdnZXJGdW5jID0gY2hpbGRQcm9wc1t0cmlnZ2VyXTtcbiAgICAgIHZhciB2YWx1ZVByb3BzID0gbmFtZSAhPT0gdW5kZWZpbmVkID8gbWVyZ2VkR2V0VmFsdWVQcm9wcyh2YWx1ZSkgOiB7fTtcblxuICAgICAgLy8gd2FybmluZyB3aGVuIHByb3AgdmFsdWUgaXMgZnVuY3Rpb25cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZhbHVlUHJvcHMpIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWVQcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgd2FybmluZyh0eXBlb2YgdmFsdWVQcm9wc1trZXldICE9PSAnZnVuY3Rpb24nLCBcIkl0J3Mgbm90IHJlY29tbWVuZGVkIHRvIGdlbmVyYXRlIGR5bmFtaWMgZnVuY3Rpb24gcHJvcCBieSBgZ2V0VmFsdWVQcm9wc2AuIFBsZWFzZSBwYXNzIGl0IHRvIGNoaWxkIGNvbXBvbmVudCBkaXJlY3RseSAocHJvcDogXCIuY29uY2F0KGtleSwgXCIpXCIpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgY29udHJvbCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2hpbGRQcm9wcyksIHZhbHVlUHJvcHMpO1xuXG4gICAgICAvLyBBZGQgdHJpZ2dlclxuICAgICAgY29udHJvbFt0cmlnZ2VyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTWFyayBhcyB0b3VjaGVkXG4gICAgICAgIF90aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgICAgICBfdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIF90aGlzLnRyaWdnZXJNZXRhRXZlbnQoKTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlO1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRWYWx1ZUZyb21FdmVudCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gZ2V0VmFsdWVGcm9tRXZlbnQuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IGRlZmF1bHRHZXRWYWx1ZUZyb21FdmVudC5hcHBseSh2b2lkIDAsIFt2YWx1ZVByb3BOYW1lXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG5vcm1hbGl6ZShuZXdWYWx1ZSwgdmFsdWUsIGdldEZpZWxkc1ZhbHVlKHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgICAgIG5hbWVQYXRoOiBuYW1lUGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmlnaW5UcmlnZ2VyRnVuYykge1xuICAgICAgICAgIG9yaWdpblRyaWdnZXJGdW5jLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB2YWxpZGF0ZVRyaWdnZXJcbiAgICAgIHZhciB2YWxpZGF0ZVRyaWdnZXJMaXN0ID0gdG9BcnJheShtZXJnZWRWYWxpZGF0ZVRyaWdnZXIgfHwgW10pO1xuICAgICAgdmFsaWRhdGVUcmlnZ2VyTGlzdC5mb3JFYWNoKGZ1bmN0aW9uICh0cmlnZ2VyTmFtZSkge1xuICAgICAgICAvLyBXcmFwIGFkZGl0aW9uYWwgZnVuY3Rpb24gb2YgY29tcG9uZW50LCBzbyB0aGF0IHdlIGNhbiBnZXQgbGF0ZXN0IHZhbHVlIGZyb20gc3RvcmVcbiAgICAgICAgdmFyIG9yaWdpblRyaWdnZXIgPSBjb250cm9sW3RyaWdnZXJOYW1lXTtcbiAgICAgICAgY29udHJvbFt0cmlnZ2VyTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG9yaWdpblRyaWdnZXIpIHtcbiAgICAgICAgICAgIG9yaWdpblRyaWdnZXIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFsd2F5cyB1c2UgbGF0ZXN0IHJ1bGVzXG4gICAgICAgICAgdmFyIHJ1bGVzID0gX3RoaXMucHJvcHMucnVsZXM7XG4gICAgICAgICAgaWYgKHJ1bGVzICYmIHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gV2UgZGlzcGF0Y2ggdmFsaWRhdGUgdG8gcm9vdCxcbiAgICAgICAgICAgIC8vIHNpbmNlIGl0IHdpbGwgdXBkYXRlIHJlbGF0ZWQgZGF0YSB3aXRoIG90aGVyIGZpZWxkIHdpdGggc2FtZSBuYW1lXG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgIHR5cGU6ICd2YWxpZGF0ZUZpZWxkJyxcbiAgICAgICAgICAgICAgbmFtZVBhdGg6IG5hbWVQYXRoLFxuICAgICAgICAgICAgICB0cmlnZ2VyTmFtZTogdHJpZ2dlck5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgfSk7XG4gICAgaWYgKHByb3BzLmZpZWxkQ29udGV4dCkge1xuICAgICAgdmFyIGdldEludGVybmFsSG9va3MgPSBwcm9wcy5maWVsZENvbnRleHQuZ2V0SW50ZXJuYWxIb29rcztcbiAgICAgIHZhciBfZ2V0SW50ZXJuYWxIb29rczIgPSBnZXRJbnRlcm5hbEhvb2tzKEhPT0tfTUFSSyksXG4gICAgICAgIGluaXRFbnRpdHlWYWx1ZSA9IF9nZXRJbnRlcm5hbEhvb2tzMi5pbml0RW50aXR5VmFsdWU7XG4gICAgICBpbml0RW50aXR5VmFsdWUoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBzaG91bGRVcGRhdGUgPSBfdGhpcyRwcm9wczcuc2hvdWxkVXBkYXRlLFxuICAgICAgICBmaWVsZENvbnRleHQgPSBfdGhpcyRwcm9wczcuZmllbGRDb250ZXh0O1xuICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcblxuICAgICAgLy8gUmVnaXN0ZXIgb24gaW5pdFxuICAgICAgaWYgKGZpZWxkQ29udGV4dCkge1xuICAgICAgICB2YXIgZ2V0SW50ZXJuYWxIb29rcyA9IGZpZWxkQ29udGV4dC5nZXRJbnRlcm5hbEhvb2tzO1xuICAgICAgICB2YXIgX2dldEludGVybmFsSG9va3MzID0gZ2V0SW50ZXJuYWxIb29rcyhIT09LX01BUkspLFxuICAgICAgICAgIHJlZ2lzdGVyRmllbGQgPSBfZ2V0SW50ZXJuYWxIb29rczMucmVnaXN0ZXJGaWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWxSZWdpc3RlckZ1bmMgPSByZWdpc3RlckZpZWxkKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmUgbW9yZSByZW5kZXIgZm9yIGNvbXBvbmVudCBpbiBjYXNlIGZpZWxkcyBub3QgcmVhZHlcbiAgICAgIGlmIChzaG91bGRVcGRhdGUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5yZVJlbmRlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2FuY2VsUmVnaXN0ZXIoKTtcbiAgICAgIHRoaXMudHJpZ2dlck1ldGFFdmVudCh0cnVlKTtcbiAgICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZVJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZVJlbmRlcigpIHtcbiAgICAgIGlmICghdGhpcy5tb3VudGVkKSByZXR1cm47XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcmVzZXRDb3VudCA9IHRoaXMuc3RhdGUucmVzZXRDb3VudDtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgX3RoaXMkZ2V0T25seUNoaWxkID0gdGhpcy5nZXRPbmx5Q2hpbGQoY2hpbGRyZW4pLFxuICAgICAgICBjaGlsZCA9IF90aGlzJGdldE9ubHlDaGlsZC5jaGlsZCxcbiAgICAgICAgaXNGdW5jdGlvbiA9IF90aGlzJGdldE9ubHlDaGlsZC5pc0Z1bmN0aW9uO1xuXG4gICAgICAvLyBOb3QgbmVlZCB0byBgY2xvbmVFbGVtZW50YCBzaW5jZSB1c2VyIGNhbiBoYW5kbGUgdGhpcyBpbiByZW5kZXIgZnVuY3Rpb24gc2VsZlxuICAgICAgdmFyIHJldHVybkNoaWxkTm9kZTtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybkNoaWxkTm9kZSA9IGNoaWxkO1xuICAgICAgfSBlbHNlIGlmICggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICByZXR1cm5DaGlsZE5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB0aGlzLmdldENvbnRyb2xsZWQoY2hpbGQucHJvcHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmcoIWNoaWxkLCAnYGNoaWxkcmVuYCBvZiBGaWVsZCBpcyBub3QgdmFsaWRhdGUgUmVhY3RFbGVtZW50LicpO1xuICAgICAgICByZXR1cm5DaGlsZE5vZGUgPSBjaGlsZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBrZXk6IHJlc2V0Q291bnRcbiAgICAgIH0sIHJldHVybkNoaWxkTm9kZSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBGaWVsZDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShGaWVsZCwgXCJjb250ZXh0VHlwZVwiLCBGaWVsZENvbnRleHQpO1xuX2RlZmluZVByb3BlcnR5KEZpZWxkLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHRyaWdnZXI6ICdvbkNoYW5nZScsXG4gIHZhbHVlUHJvcE5hbWU6ICd2YWx1ZSdcbn0pO1xuZnVuY3Rpb24gV3JhcHBlckZpZWxkKF9yZWY2KSB7XG4gIHZhciBfcmVzdFByb3BzJGlzTGlzdEZpZWw7XG4gIHZhciBuYW1lID0gX3JlZjYubmFtZSxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjYsIF9leGNsdWRlZCk7XG4gIHZhciBmaWVsZENvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KEZpZWxkQ29udGV4dCk7XG4gIHZhciBsaXN0Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTGlzdENvbnRleHQpO1xuICB2YXIgbmFtZVBhdGggPSBuYW1lICE9PSB1bmRlZmluZWQgPyBnZXROYW1lUGF0aChuYW1lKSA6IHVuZGVmaW5lZDtcbiAgdmFyIGlzTWVyZ2VkTGlzdEZpZWxkID0gKF9yZXN0UHJvcHMkaXNMaXN0RmllbCA9IHJlc3RQcm9wcy5pc0xpc3RGaWVsZCkgIT09IG51bGwgJiYgX3Jlc3RQcm9wcyRpc0xpc3RGaWVsICE9PSB2b2lkIDAgPyBfcmVzdFByb3BzJGlzTGlzdEZpZWwgOiAhIWxpc3RDb250ZXh0O1xuICB2YXIga2V5ID0gJ2tlZXAnO1xuICBpZiAoIWlzTWVyZ2VkTGlzdEZpZWxkKSB7XG4gICAga2V5ID0gXCJfXCIuY29uY2F0KChuYW1lUGF0aCB8fCBbXSkuam9pbignXycpKTtcbiAgfVxuXG4gIC8vIFdhcm5pbmcgaWYgaXQncyBhIGRpcmVjdGx5IGxpc3QgZmllbGQuXG4gIC8vIFdlIGNhbiBzdGlsbCBzdXBwb3J0IG11bHRpcGxlIGxldmVsIGZpZWxkIHByZXNlcnZlLlxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiByZXN0UHJvcHMucHJlc2VydmUgPT09IGZhbHNlICYmIGlzTWVyZ2VkTGlzdEZpZWxkICYmIG5hbWVQYXRoLmxlbmd0aCA8PSAxKSB7XG4gICAgd2FybmluZyhmYWxzZSwgJ2BwcmVzZXJ2ZWAgc2hvdWxkIG5vdCBhcHBseSBvbiBGb3JtLkxpc3QgZmllbGRzLicpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGaWVsZCwgX2V4dGVuZHMoe1xuICAgIGtleToga2V5LFxuICAgIG5hbWU6IG5hbWVQYXRoLFxuICAgIGlzTGlzdEZpZWxkOiBpc01lcmdlZExpc3RGaWVsZFxuICB9LCByZXN0UHJvcHMsIHtcbiAgICBmaWVsZENvbnRleHQ6IGZpZWxkQ29udGV4dFxuICB9KSk7XG59XG5leHBvcnQgZGVmYXVsdCBXcmFwcGVyRmllbGQ7IiwiaW1wb3J0IHdhcm5pbmcgZnJvbSBcInJjLXV0aWwvZXMvd2FybmluZ1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBIT09LX01BUksgPSAnUkNfRk9STV9JTlRFUk5BTF9IT09LUyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG52YXIgd2FybmluZ0Z1bmMgPSBmdW5jdGlvbiB3YXJuaW5nRnVuYygpIHtcbiAgd2FybmluZyhmYWxzZSwgJ0NhbiBub3QgZmluZCBGb3JtQ29udGV4dC4gUGxlYXNlIG1ha2Ugc3VyZSB5b3Ugd3JhcCBGaWVsZCB1bmRlciBGb3JtLicpO1xufTtcbnZhciBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICBnZXRGaWVsZFZhbHVlOiB3YXJuaW5nRnVuYyxcbiAgZ2V0RmllbGRzVmFsdWU6IHdhcm5pbmdGdW5jLFxuICBnZXRGaWVsZEVycm9yOiB3YXJuaW5nRnVuYyxcbiAgZ2V0RmllbGRXYXJuaW5nOiB3YXJuaW5nRnVuYyxcbiAgZ2V0RmllbGRzRXJyb3I6IHdhcm5pbmdGdW5jLFxuICBpc0ZpZWxkc1RvdWNoZWQ6IHdhcm5pbmdGdW5jLFxuICBpc0ZpZWxkVG91Y2hlZDogd2FybmluZ0Z1bmMsXG4gIGlzRmllbGRWYWxpZGF0aW5nOiB3YXJuaW5nRnVuYyxcbiAgaXNGaWVsZHNWYWxpZGF0aW5nOiB3YXJuaW5nRnVuYyxcbiAgcmVzZXRGaWVsZHM6IHdhcm5pbmdGdW5jLFxuICBzZXRGaWVsZHM6IHdhcm5pbmdGdW5jLFxuICBzZXRGaWVsZFZhbHVlOiB3YXJuaW5nRnVuYyxcbiAgc2V0RmllbGRzVmFsdWU6IHdhcm5pbmdGdW5jLFxuICB2YWxpZGF0ZUZpZWxkczogd2FybmluZ0Z1bmMsXG4gIHN1Ym1pdDogd2FybmluZ0Z1bmMsXG4gIGdldEludGVybmFsSG9va3M6IGZ1bmN0aW9uIGdldEludGVybmFsSG9va3MoKSB7XG4gICAgd2FybmluZ0Z1bmMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGF0Y2g6IHdhcm5pbmdGdW5jLFxuICAgICAgaW5pdEVudGl0eVZhbHVlOiB3YXJuaW5nRnVuYyxcbiAgICAgIHJlZ2lzdGVyRmllbGQ6IHdhcm5pbmdGdW5jLFxuICAgICAgdXNlU3Vic2NyaWJlOiB3YXJuaW5nRnVuYyxcbiAgICAgIHNldEluaXRpYWxWYWx1ZXM6IHdhcm5pbmdGdW5jLFxuICAgICAgZGVzdHJveUZvcm06IHdhcm5pbmdGdW5jLFxuICAgICAgc2V0Q2FsbGJhY2tzOiB3YXJuaW5nRnVuYyxcbiAgICAgIHJlZ2lzdGVyV2F0Y2g6IHdhcm5pbmdGdW5jLFxuICAgICAgZ2V0RmllbGRzOiB3YXJuaW5nRnVuYyxcbiAgICAgIHNldFZhbGlkYXRlTWVzc2FnZXM6IHdhcm5pbmdGdW5jLFxuICAgICAgc2V0UHJlc2VydmU6IHdhcm5pbmdGdW5jLFxuICAgICAgZ2V0SW5pdGlhbFZhbHVlOiB3YXJuaW5nRnVuY1xuICAgIH07XG4gIH1cbn0pO1xuZXhwb3J0IGRlZmF1bHQgQ29udGV4dDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wibmFtZVwiLCBcImluaXRpYWxWYWx1ZXNcIiwgXCJmaWVsZHNcIiwgXCJmb3JtXCIsIFwicHJlc2VydmVcIiwgXCJjaGlsZHJlblwiLCBcImNvbXBvbmVudFwiLCBcInZhbGlkYXRlTWVzc2FnZXNcIiwgXCJ2YWxpZGF0ZVRyaWdnZXJcIiwgXCJvblZhbHVlc0NoYW5nZVwiLCBcIm9uRmllbGRzQ2hhbmdlXCIsIFwib25GaW5pc2hcIiwgXCJvbkZpbmlzaEZhaWxlZFwiLCBcImNsZWFyT25EZXN0cm95XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUZvcm0gZnJvbSBcIi4vdXNlRm9ybVwiO1xuaW1wb3J0IEZpZWxkQ29udGV4dCwgeyBIT09LX01BUksgfSBmcm9tIFwiLi9GaWVsZENvbnRleHRcIjtcbmltcG9ydCBGb3JtQ29udGV4dCBmcm9tIFwiLi9Gb3JtQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNTaW1pbGFyIH0gZnJvbSBcIi4vdXRpbHMvdmFsdWVVdGlsXCI7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSBcIi4vTGlzdENvbnRleHRcIjtcbnZhciBGb3JtID0gZnVuY3Rpb24gRm9ybShfcmVmLCByZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgaW5pdGlhbFZhbHVlcyA9IF9yZWYuaW5pdGlhbFZhbHVlcyxcbiAgICBmaWVsZHMgPSBfcmVmLmZpZWxkcyxcbiAgICBmb3JtID0gX3JlZi5mb3JtLFxuICAgIHByZXNlcnZlID0gX3JlZi5wcmVzZXJ2ZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICBDb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2Zvcm0nIDogX3JlZiRjb21wb25lbnQsXG4gICAgdmFsaWRhdGVNZXNzYWdlcyA9IF9yZWYudmFsaWRhdGVNZXNzYWdlcyxcbiAgICBfcmVmJHZhbGlkYXRlVHJpZ2dlciA9IF9yZWYudmFsaWRhdGVUcmlnZ2VyLFxuICAgIHZhbGlkYXRlVHJpZ2dlciA9IF9yZWYkdmFsaWRhdGVUcmlnZ2VyID09PSB2b2lkIDAgPyAnb25DaGFuZ2UnIDogX3JlZiR2YWxpZGF0ZVRyaWdnZXIsXG4gICAgb25WYWx1ZXNDaGFuZ2UgPSBfcmVmLm9uVmFsdWVzQ2hhbmdlLFxuICAgIF9vbkZpZWxkc0NoYW5nZSA9IF9yZWYub25GaWVsZHNDaGFuZ2UsXG4gICAgX29uRmluaXNoID0gX3JlZi5vbkZpbmlzaCxcbiAgICBvbkZpbmlzaEZhaWxlZCA9IF9yZWYub25GaW5pc2hGYWlsZWQsXG4gICAgY2xlYXJPbkRlc3Ryb3kgPSBfcmVmLmNsZWFyT25EZXN0cm95LFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuICB2YXIgbmF0aXZlRWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIGZvcm1Db250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udGV4dCk7XG5cbiAgLy8gV2UgY3VzdG9taXplIGhhbmRsZSBldmVudCBzaW5jZSBDb250ZXh0IHdpbGwgbWFrZXMgYWxsIHRoZSBjb25zdW1lciByZS1yZW5kZXI6XG4gIC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9jb250ZXh0Lmh0bWwjY29udGV4dHByb3ZpZGVyXG4gIHZhciBfdXNlRm9ybSA9IHVzZUZvcm0oZm9ybSksXG4gICAgX3VzZUZvcm0yID0gX3NsaWNlZFRvQXJyYXkoX3VzZUZvcm0sIDEpLFxuICAgIGZvcm1JbnN0YW5jZSA9IF91c2VGb3JtMlswXTtcbiAgdmFyIF9nZXRJbnRlcm5hbEhvb2tzID0gZm9ybUluc3RhbmNlLmdldEludGVybmFsSG9va3MoSE9PS19NQVJLKSxcbiAgICB1c2VTdWJzY3JpYmUgPSBfZ2V0SW50ZXJuYWxIb29rcy51c2VTdWJzY3JpYmUsXG4gICAgc2V0SW5pdGlhbFZhbHVlcyA9IF9nZXRJbnRlcm5hbEhvb2tzLnNldEluaXRpYWxWYWx1ZXMsXG4gICAgc2V0Q2FsbGJhY2tzID0gX2dldEludGVybmFsSG9va3Muc2V0Q2FsbGJhY2tzLFxuICAgIHNldFZhbGlkYXRlTWVzc2FnZXMgPSBfZ2V0SW50ZXJuYWxIb29rcy5zZXRWYWxpZGF0ZU1lc3NhZ2VzLFxuICAgIHNldFByZXNlcnZlID0gX2dldEludGVybmFsSG9va3Muc2V0UHJlc2VydmUsXG4gICAgZGVzdHJveUZvcm0gPSBfZ2V0SW50ZXJuYWxIb29rcy5kZXN0cm95Rm9ybTtcblxuICAvLyBQYXNzIHJlZiB3aXRoIGZvcm0gaW5zdGFuY2VcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb3JtSW5zdGFuY2UpLCB7fSwge1xuICAgICAgbmF0aXZlRWxlbWVudDogbmF0aXZlRWxlbWVudFJlZi5jdXJyZW50XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIGZvcm0gaW50byBDb250ZXh0XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgZm9ybUNvbnRleHQucmVnaXN0ZXJGb3JtKG5hbWUsIGZvcm1JbnN0YW5jZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvcm1Db250ZXh0LnVucmVnaXN0ZXJGb3JtKG5hbWUpO1xuICAgIH07XG4gIH0sIFtmb3JtQ29udGV4dCwgZm9ybUluc3RhbmNlLCBuYW1lXSk7XG5cbiAgLy8gUGFzcyBwcm9wcyB0byBzdG9yZVxuICBzZXRWYWxpZGF0ZU1lc3NhZ2VzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9ybUNvbnRleHQudmFsaWRhdGVNZXNzYWdlcyksIHZhbGlkYXRlTWVzc2FnZXMpKTtcbiAgc2V0Q2FsbGJhY2tzKHtcbiAgICBvblZhbHVlc0NoYW5nZTogb25WYWx1ZXNDaGFuZ2UsXG4gICAgb25GaWVsZHNDaGFuZ2U6IGZ1bmN0aW9uIG9uRmllbGRzQ2hhbmdlKGNoYW5nZWRGaWVsZHMpIHtcbiAgICAgIGZvcm1Db250ZXh0LnRyaWdnZXJGb3JtQ2hhbmdlKG5hbWUsIGNoYW5nZWRGaWVsZHMpO1xuICAgICAgaWYgKF9vbkZpZWxkc0NoYW5nZSkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgX29uRmllbGRzQ2hhbmdlLmFwcGx5KHZvaWQgMCwgW2NoYW5nZWRGaWVsZHNdLmNvbmNhdChyZXN0KSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkZpbmlzaDogZnVuY3Rpb24gb25GaW5pc2godmFsdWVzKSB7XG4gICAgICBmb3JtQ29udGV4dC50cmlnZ2VyRm9ybUZpbmlzaChuYW1lLCB2YWx1ZXMpO1xuICAgICAgaWYgKF9vbkZpbmlzaCkge1xuICAgICAgICBfb25GaW5pc2godmFsdWVzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRmluaXNoRmFpbGVkOiBvbkZpbmlzaEZhaWxlZFxuICB9KTtcbiAgc2V0UHJlc2VydmUocHJlc2VydmUpO1xuXG4gIC8vIFNldCBpbml0aWFsIHZhbHVlLCBpbml0IHN0b3JlIHZhbHVlIHdoZW4gZmlyc3QgbW91bnRcbiAgdmFyIG1vdW50UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBzZXRJbml0aWFsVmFsdWVzKGluaXRpYWxWYWx1ZXMsICFtb3VudFJlZi5jdXJyZW50KTtcbiAgaWYgKCFtb3VudFJlZi5jdXJyZW50KSB7XG4gICAgbW91bnRSZWYuY3VycmVudCA9IHRydWU7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlc3Ryb3lGb3JtKGNsZWFyT25EZXN0cm95KTtcbiAgICB9O1xuICB9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtdKTtcblxuICAvLyBQcmVwYXJlIGNoaWxkcmVuIGJ5IGBjaGlsZHJlbmAgdHlwZVxuICB2YXIgY2hpbGRyZW5Ob2RlO1xuICB2YXIgY2hpbGRyZW5SZW5kZXJQcm9wcyA9IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGNoaWxkcmVuUmVuZGVyUHJvcHMpIHtcbiAgICB2YXIgX3ZhbHVlcyA9IGZvcm1JbnN0YW5jZS5nZXRGaWVsZHNWYWx1ZSh0cnVlKTtcbiAgICBjaGlsZHJlbk5vZGUgPSBjaGlsZHJlbihfdmFsdWVzLCBmb3JtSW5zdGFuY2UpO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuTm9kZSA9IGNoaWxkcmVuO1xuICB9XG5cbiAgLy8gTm90IHVzZSBzdWJzY3JpYmUgd2hlbiB1c2luZyByZW5kZXIgcHJvcHNcbiAgdXNlU3Vic2NyaWJlKCFjaGlsZHJlblJlbmRlclByb3BzKTtcblxuICAvLyBMaXN0ZW4gaWYgZmllbGRzIHByb3ZpZGVkLiBXZSB1c2UgcmVmIHRvIHNhdmUgcHJldiBkYXRhIGhlcmUgdG8gYXZvaWQgYWRkaXRpb25hbCByZW5kZXJcbiAgdmFyIHByZXZGaWVsZHNSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzU2ltaWxhcihwcmV2RmllbGRzUmVmLmN1cnJlbnQgfHwgW10sIGZpZWxkcyB8fCBbXSkpIHtcbiAgICAgIGZvcm1JbnN0YW5jZS5zZXRGaWVsZHMoZmllbGRzIHx8IFtdKTtcbiAgICB9XG4gICAgcHJldkZpZWxkc1JlZi5jdXJyZW50ID0gZmllbGRzO1xuICB9LCBbZmllbGRzLCBmb3JtSW5zdGFuY2VdKTtcbiAgdmFyIGZvcm1Db250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb3JtSW5zdGFuY2UpLCB7fSwge1xuICAgICAgdmFsaWRhdGVUcmlnZ2VyOiB2YWxpZGF0ZVRyaWdnZXJcbiAgICB9KTtcbiAgfSwgW2Zvcm1JbnN0YW5jZSwgdmFsaWRhdGVUcmlnZ2VyXSk7XG4gIHZhciB3cmFwcGVyTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmllbGRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGZvcm1Db250ZXh0VmFsdWVcbiAgfSwgY2hpbGRyZW5Ob2RlKSk7XG4gIGlmIChDb21wb25lbnQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHdyYXBwZXJOb2RlO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHt9LCByZXN0UHJvcHMsIHtcbiAgICByZWY6IG5hdGl2ZUVsZW1lbnRSZWYsXG4gICAgb25TdWJtaXQ6IGZ1bmN0aW9uIG9uU3VibWl0KGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBmb3JtSW5zdGFuY2Uuc3VibWl0KCk7XG4gICAgfSxcbiAgICBvblJlc2V0OiBmdW5jdGlvbiBvblJlc2V0KGV2ZW50KSB7XG4gICAgICB2YXIgX3Jlc3RQcm9wcyRvblJlc2V0O1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZvcm1JbnN0YW5jZS5yZXNldEZpZWxkcygpO1xuICAgICAgKF9yZXN0UHJvcHMkb25SZXNldCA9IHJlc3RQcm9wcy5vblJlc2V0KSA9PT0gbnVsbCB8fCBfcmVzdFByb3BzJG9uUmVzZXQgPT09IHZvaWQgMCB8fCBfcmVzdFByb3BzJG9uUmVzZXQuY2FsbChyZXN0UHJvcHMsIGV2ZW50KTtcbiAgICB9XG4gIH0pLCB3cmFwcGVyTm9kZSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgRm9ybTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBGb3JtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHtcbiAgdHJpZ2dlckZvcm1DaGFuZ2U6IGZ1bmN0aW9uIHRyaWdnZXJGb3JtQ2hhbmdlKCkge30sXG4gIHRyaWdnZXJGb3JtRmluaXNoOiBmdW5jdGlvbiB0cmlnZ2VyRm9ybUZpbmlzaCgpIHt9LFxuICByZWdpc3RlckZvcm06IGZ1bmN0aW9uIHJlZ2lzdGVyRm9ybSgpIHt9LFxuICB1bnJlZ2lzdGVyRm9ybTogZnVuY3Rpb24gdW5yZWdpc3RlckZvcm0oKSB7fVxufSk7XG52YXIgRm9ybVByb3ZpZGVyID0gZnVuY3Rpb24gRm9ybVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIHZhbGlkYXRlTWVzc2FnZXMgPSBfcmVmLnZhbGlkYXRlTWVzc2FnZXMsXG4gICAgb25Gb3JtQ2hhbmdlID0gX3JlZi5vbkZvcm1DaGFuZ2UsXG4gICAgb25Gb3JtRmluaXNoID0gX3JlZi5vbkZvcm1GaW5pc2gsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgZm9ybUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250ZXh0KTtcbiAgdmFyIGZvcm1zUmVmID0gUmVhY3QudXNlUmVmKHt9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9ybUNvbnRleHQpLCB7fSwge1xuICAgICAgdmFsaWRhdGVNZXNzYWdlczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb3JtQ29udGV4dC52YWxpZGF0ZU1lc3NhZ2VzKSwgdmFsaWRhdGVNZXNzYWdlcyksXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vID0gICAgICAgICAgICAgICAgICBHbG9iYWwgRm9ybSBDb250cm9sICAgICAgICAgICAgICAgICAgPVxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICB0cmlnZ2VyRm9ybUNoYW5nZTogZnVuY3Rpb24gdHJpZ2dlckZvcm1DaGFuZ2UobmFtZSwgY2hhbmdlZEZpZWxkcykge1xuICAgICAgICBpZiAob25Gb3JtQ2hhbmdlKSB7XG4gICAgICAgICAgb25Gb3JtQ2hhbmdlKG5hbWUsIHtcbiAgICAgICAgICAgIGNoYW5nZWRGaWVsZHM6IGNoYW5nZWRGaWVsZHMsXG4gICAgICAgICAgICBmb3JtczogZm9ybXNSZWYuY3VycmVudFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1Db250ZXh0LnRyaWdnZXJGb3JtQ2hhbmdlKG5hbWUsIGNoYW5nZWRGaWVsZHMpO1xuICAgICAgfSxcbiAgICAgIHRyaWdnZXJGb3JtRmluaXNoOiBmdW5jdGlvbiB0cmlnZ2VyRm9ybUZpbmlzaChuYW1lLCB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKG9uRm9ybUZpbmlzaCkge1xuICAgICAgICAgIG9uRm9ybUZpbmlzaChuYW1lLCB7XG4gICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgICAgIGZvcm1zOiBmb3Jtc1JlZi5jdXJyZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUNvbnRleHQudHJpZ2dlckZvcm1GaW5pc2gobmFtZSwgdmFsdWVzKTtcbiAgICAgIH0sXG4gICAgICByZWdpc3RlckZvcm06IGZ1bmN0aW9uIHJlZ2lzdGVyRm9ybShuYW1lLCBmb3JtKSB7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgZm9ybXNSZWYuY3VycmVudCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9ybXNSZWYuY3VycmVudCksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIG5hbWUsIGZvcm0pKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtQ29udGV4dC5yZWdpc3RlckZvcm0obmFtZSwgZm9ybSk7XG4gICAgICB9LFxuICAgICAgdW5yZWdpc3RlckZvcm06IGZ1bmN0aW9uIHVucmVnaXN0ZXJGb3JtKG5hbWUpIHtcbiAgICAgICAgdmFyIG5ld0Zvcm1zID0gX29iamVjdFNwcmVhZCh7fSwgZm9ybXNSZWYuY3VycmVudCk7XG4gICAgICAgIGRlbGV0ZSBuZXdGb3Jtc1tuYW1lXTtcbiAgICAgICAgZm9ybXNSZWYuY3VycmVudCA9IG5ld0Zvcm1zO1xuICAgICAgICBmb3JtQ29udGV4dC51bnJlZ2lzdGVyRm9ybShuYW1lKTtcbiAgICAgIH1cbiAgICB9KVxuICB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IHsgRm9ybVByb3ZpZGVyIH07XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udGV4dDsiLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCBGaWVsZENvbnRleHQgZnJvbSBcIi4vRmllbGRDb250ZXh0XCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcIi4vRmllbGRcIjtcbmltcG9ydCB7IG1vdmUgYXMgX21vdmUsIGdldE5hbWVQYXRoIH0gZnJvbSBcIi4vdXRpbHMvdmFsdWVVdGlsXCI7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSBcIi4vTGlzdENvbnRleHRcIjtcbmZ1bmN0aW9uIExpc3QoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICBpbml0aWFsVmFsdWUgPSBfcmVmLmluaXRpYWxWYWx1ZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgcnVsZXMgPSBfcmVmLnJ1bGVzLFxuICAgIHZhbGlkYXRlVHJpZ2dlciA9IF9yZWYudmFsaWRhdGVUcmlnZ2VyLFxuICAgIGlzTGlzdEZpZWxkID0gX3JlZi5pc0xpc3RGaWVsZDtcbiAgdmFyIGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KEZpZWxkQ29udGV4dCk7XG4gIHZhciB3cmFwcGVyTGlzdENvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgdmFyIGtleVJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAga2V5czogW10sXG4gICAgaWQ6IDBcbiAgfSk7XG4gIHZhciBrZXlNYW5hZ2VyID0ga2V5UmVmLmN1cnJlbnQ7XG4gIHZhciBwcmVmaXhOYW1lID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudFByZWZpeE5hbWUgPSBnZXROYW1lUGF0aChjb250ZXh0LnByZWZpeE5hbWUpIHx8IFtdO1xuICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHBhcmVudFByZWZpeE5hbWUpLCBfdG9Db25zdW1hYmxlQXJyYXkoZ2V0TmFtZVBhdGgobmFtZSkpKTtcbiAgfSwgW2NvbnRleHQucHJlZml4TmFtZSwgbmFtZV0pO1xuICB2YXIgZmllbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29udGV4dCksIHt9LCB7XG4gICAgICBwcmVmaXhOYW1lOiBwcmVmaXhOYW1lXG4gICAgfSk7XG4gIH0sIFtjb250ZXh0LCBwcmVmaXhOYW1lXSk7XG5cbiAgLy8gTGlzdCBjb250ZXh0XG4gIHZhciBsaXN0Q29udGV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRLZXk6IGZ1bmN0aW9uIGdldEtleShuYW1lUGF0aCkge1xuICAgICAgICB2YXIgbGVuID0gcHJlZml4TmFtZS5sZW5ndGg7XG4gICAgICAgIHZhciBwYXRoTmFtZSA9IG5hbWVQYXRoW2xlbl07XG4gICAgICAgIHJldHVybiBba2V5TWFuYWdlci5rZXlzW3BhdGhOYW1lXSwgbmFtZVBhdGguc2xpY2UobGVuICsgMSldO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtwcmVmaXhOYW1lXSk7XG5cbiAgLy8gVXNlciBzaG91bGQgbm90IHBhc3MgYGNoaWxkcmVuYCBhcyBvdGhlciB0eXBlLlxuICBpZiAodHlwZW9mIGNoaWxkcmVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgd2FybmluZyhmYWxzZSwgJ0Zvcm0uTGlzdCBvbmx5IGFjY2VwdHMgZnVuY3Rpb24gYXMgY2hpbGRyZW4uJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZFVwZGF0ZShwcmV2VmFsdWUsIG5leHRWYWx1ZSwgX3JlZjIpIHtcbiAgICB2YXIgc291cmNlID0gX3JlZjIuc291cmNlO1xuICAgIGlmIChzb3VyY2UgPT09ICdpbnRlcm5hbCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZWYWx1ZSAhPT0gbmV4dFZhbHVlO1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogbGlzdENvbnRleHRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmllbGRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGZpZWxkQ29udGV4dFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGaWVsZCwge1xuICAgIG5hbWU6IFtdLFxuICAgIHNob3VsZFVwZGF0ZTogc2hvdWxkVXBkYXRlLFxuICAgIHJ1bGVzOiBydWxlcyxcbiAgICB2YWxpZGF0ZVRyaWdnZXI6IHZhbGlkYXRlVHJpZ2dlcixcbiAgICBpbml0aWFsVmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICBpc0xpc3Q6IHRydWUsXG4gICAgaXNMaXN0RmllbGQ6IGlzTGlzdEZpZWxkICE9PSBudWxsICYmIGlzTGlzdEZpZWxkICE9PSB2b2lkIDAgPyBpc0xpc3RGaWVsZCA6ICEhd3JhcHBlckxpc3RDb250ZXh0XG4gIH0sIGZ1bmN0aW9uIChfcmVmMywgbWV0YSkge1xuICAgIHZhciBfcmVmMyR2YWx1ZSA9IF9yZWYzLnZhbHVlLFxuICAgICAgdmFsdWUgPSBfcmVmMyR2YWx1ZSA9PT0gdm9pZCAwID8gW10gOiBfcmVmMyR2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlID0gX3JlZjMub25DaGFuZ2U7XG4gICAgdmFyIGdldEZpZWxkVmFsdWUgPSBjb250ZXh0LmdldEZpZWxkVmFsdWU7XG4gICAgdmFyIGdldE5ld1ZhbHVlID0gZnVuY3Rpb24gZ2V0TmV3VmFsdWUoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gZ2V0RmllbGRWYWx1ZShwcmVmaXhOYW1lIHx8IFtdKTtcbiAgICAgIHJldHVybiB2YWx1ZXMgfHwgW107XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBbHdheXMgZ2V0IGxhdGVzdCB2YWx1ZSBpbiBjYXNlIHVzZXIgdXBkYXRlIGZpZWxkcyBieSBgZm9ybWAgYXBpLlxuICAgICAqL1xuICAgIHZhciBvcGVyYXRpb25zID0ge1xuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQoZGVmYXVsdFZhbHVlLCBpbmRleCkge1xuICAgICAgICAvLyBNYXBwaW5nIGtleXNcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gZ2V0TmV3VmFsdWUoKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gbmV3VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAga2V5TWFuYWdlci5rZXlzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShrZXlNYW5hZ2VyLmtleXMuc2xpY2UoMCwgaW5kZXgpKSwgW2tleU1hbmFnZXIuaWRdLCBfdG9Db25zdW1hYmxlQXJyYXkoa2V5TWFuYWdlci5rZXlzLnNsaWNlKGluZGV4KSkpO1xuICAgICAgICAgIG9uQ2hhbmdlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkobmV3VmFsdWUuc2xpY2UoMCwgaW5kZXgpKSwgW2RlZmF1bHRWYWx1ZV0sIF90b0NvbnN1bWFibGVBcnJheShuZXdWYWx1ZS5zbGljZShpbmRleCkpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG5ld1ZhbHVlLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoZmFsc2UsICdUaGUgc2Vjb25kIHBhcmFtZXRlciBvZiB0aGUgYWRkIGZ1bmN0aW9uIHNob3VsZCBiZSBhIHZhbGlkIHBvc2l0aXZlIG51bWJlci4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5TWFuYWdlci5rZXlzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShrZXlNYW5hZ2VyLmtleXMpLCBba2V5TWFuYWdlci5pZF0pO1xuICAgICAgICAgIG9uQ2hhbmdlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkobmV3VmFsdWUpLCBbZGVmYXVsdFZhbHVlXSkpO1xuICAgICAgICB9XG4gICAgICAgIGtleU1hbmFnZXIuaWQgKz0gMTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShpbmRleCkge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBnZXROZXdWYWx1ZSgpO1xuICAgICAgICB2YXIgaW5kZXhTZXQgPSBuZXcgU2V0KEFycmF5LmlzQXJyYXkoaW5kZXgpID8gaW5kZXggOiBbaW5kZXhdKTtcbiAgICAgICAgaWYgKGluZGV4U2V0LnNpemUgPD0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZXlNYW5hZ2VyLmtleXMgPSBrZXlNYW5hZ2VyLmtleXMuZmlsdGVyKGZ1bmN0aW9uIChfLCBrZXlzSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gIWluZGV4U2V0LmhhcyhrZXlzSW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUcmlnZ2VyIHN0b3JlIGNoYW5nZVxuICAgICAgICBvbkNoYW5nZShuZXdWYWx1ZS5maWx0ZXIoZnVuY3Rpb24gKF8sIHZhbHVlSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gIWluZGV4U2V0Lmhhcyh2YWx1ZUluZGV4KTtcbiAgICAgICAgfSkpO1xuICAgICAgfSxcbiAgICAgIG1vdmU6IGZ1bmN0aW9uIG1vdmUoZnJvbSwgdG8pIHtcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGdldE5ld1ZhbHVlKCk7XG5cbiAgICAgICAgLy8gRG8gbm90IGhhbmRsZSBvdXQgb2YgcmFuZ2VcbiAgICAgICAgaWYgKGZyb20gPCAwIHx8IGZyb20gPj0gbmV3VmFsdWUubGVuZ3RoIHx8IHRvIDwgMCB8fCB0byA+PSBuZXdWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAga2V5TWFuYWdlci5rZXlzID0gX21vdmUoa2V5TWFuYWdlci5rZXlzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBzdG9yZSBjaGFuZ2VcbiAgICAgICAgb25DaGFuZ2UoX21vdmUobmV3VmFsdWUsIGZyb20sIHRvKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgbGlzdFZhbHVlID0gdmFsdWUgfHwgW107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3RWYWx1ZSkpIHtcbiAgICAgIGxpc3RWYWx1ZSA9IFtdO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhmYWxzZSwgXCJDdXJyZW50IHZhbHVlIG9mICdcIi5jb25jYXQocHJlZml4TmFtZS5qb2luKCcgPiAnKSwgXCInIGlzIG5vdCBhbiBhcnJheSB0eXBlLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbihsaXN0VmFsdWUubWFwKGZ1bmN0aW9uIChfXywgaW5kZXgpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlNYW5hZ2VyLmtleXNbaW5kZXhdO1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGtleU1hbmFnZXIua2V5c1tpbmRleF0gPSBrZXlNYW5hZ2VyLmlkO1xuICAgICAgICBrZXkgPSBrZXlNYW5hZ2VyLmtleXNbaW5kZXhdO1xuICAgICAgICBrZXlNYW5hZ2VyLmlkICs9IDE7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBpbmRleCxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGlzTGlzdEZpZWxkOiB0cnVlXG4gICAgICB9O1xuICAgIH0pLCBvcGVyYXRpb25zLCBtZXRhKTtcbiAgfSkpKTtcbn1cbmV4cG9ydCBkZWZhdWx0IExpc3Q7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIExpc3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZGVmYXVsdCBMaXN0Q29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRmllbGQgZnJvbSBcIi4vRmllbGRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCIuL0xpc3RcIjtcbmltcG9ydCB1c2VGb3JtIGZyb20gXCIuL3VzZUZvcm1cIjtcbmltcG9ydCBGaWVsZEZvcm0gZnJvbSBcIi4vRm9ybVwiO1xuaW1wb3J0IHsgRm9ybVByb3ZpZGVyIH0gZnJvbSBcIi4vRm9ybUNvbnRleHRcIjtcbmltcG9ydCBGaWVsZENvbnRleHQgZnJvbSBcIi4vRmllbGRDb250ZXh0XCI7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSBcIi4vTGlzdENvbnRleHRcIjtcbmltcG9ydCB1c2VXYXRjaCBmcm9tIFwiLi91c2VXYXRjaFwiO1xudmFyIEludGVybmFsRm9ybSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKEZpZWxkRm9ybSk7XG52YXIgUmVmRm9ybSA9IEludGVybmFsRm9ybTtcblJlZkZvcm0uRm9ybVByb3ZpZGVyID0gRm9ybVByb3ZpZGVyO1xuUmVmRm9ybS5GaWVsZCA9IEZpZWxkO1xuUmVmRm9ybS5MaXN0ID0gTGlzdDtcblJlZkZvcm0udXNlRm9ybSA9IHVzZUZvcm07XG5SZWZGb3JtLnVzZVdhdGNoID0gdXNlV2F0Y2g7XG5leHBvcnQgeyBGaWVsZCwgTGlzdCwgdXNlRm9ybSwgRm9ybVByb3ZpZGVyLCBGaWVsZENvbnRleHQsIExpc3RDb250ZXh0LCB1c2VXYXRjaCB9O1xuZXhwb3J0IGRlZmF1bHQgUmVmRm9ybTsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJuYW1lXCJdO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwicmMtdXRpbC9lcy91dGlscy9zZXRcIjtcbmltcG9ydCB3YXJuaW5nIGZyb20gXCJyYy11dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEhPT0tfTUFSSyB9IGZyb20gXCIuL0ZpZWxkQ29udGV4dFwiO1xuaW1wb3J0IHsgYWxsUHJvbWlzZUZpbmlzaCB9IGZyb20gXCIuL3V0aWxzL2FzeW5jVXRpbFwiO1xuaW1wb3J0IHsgZGVmYXVsdFZhbGlkYXRlTWVzc2FnZXMgfSBmcm9tIFwiLi91dGlscy9tZXNzYWdlc1wiO1xuaW1wb3J0IE5hbWVNYXAgZnJvbSBcIi4vdXRpbHMvTmFtZU1hcFwiO1xuaW1wb3J0IHsgY2xvbmVCeU5hbWVQYXRoTGlzdCwgY29udGFpbnNOYW1lUGF0aCwgZ2V0TmFtZVBhdGgsIGdldFZhbHVlLCBtYXRjaE5hbWVQYXRoLCBzZXRWYWx1ZSB9IGZyb20gXCIuL3V0aWxzL3ZhbHVlVXRpbFwiO1xuZXhwb3J0IHZhciBGb3JtU3RvcmUgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUNsYXNzKGZ1bmN0aW9uIEZvcm1TdG9yZShmb3JjZVJvb3RVcGRhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvcm1TdG9yZSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZvcm1Ib29rZWRcIiwgZmFsc2UpO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJmb3JjZVJvb3RVcGRhdGVcIiwgdm9pZCAwKTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3Vic2NyaWJhYmxlXCIsIHRydWUpO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdG9yZVwiLCB7fSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpZWxkRW50aXRpZXNcIiwgW10pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpbml0aWFsVmFsdWVzXCIsIHt9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2FsbGJhY2tzXCIsIHt9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidmFsaWRhdGVNZXNzYWdlc1wiLCBudWxsKTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJlc2VydmVcIiwgbnVsbCk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxhc3RWYWxpZGF0ZVByb21pc2VcIiwgbnVsbCk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldEZvcm1cIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRGaWVsZFZhbHVlOiBfdGhpcy5nZXRGaWVsZFZhbHVlLFxuICAgICAgZ2V0RmllbGRzVmFsdWU6IF90aGlzLmdldEZpZWxkc1ZhbHVlLFxuICAgICAgZ2V0RmllbGRFcnJvcjogX3RoaXMuZ2V0RmllbGRFcnJvcixcbiAgICAgIGdldEZpZWxkV2FybmluZzogX3RoaXMuZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgZ2V0RmllbGRzRXJyb3I6IF90aGlzLmdldEZpZWxkc0Vycm9yLFxuICAgICAgaXNGaWVsZHNUb3VjaGVkOiBfdGhpcy5pc0ZpZWxkc1RvdWNoZWQsXG4gICAgICBpc0ZpZWxkVG91Y2hlZDogX3RoaXMuaXNGaWVsZFRvdWNoZWQsXG4gICAgICBpc0ZpZWxkVmFsaWRhdGluZzogX3RoaXMuaXNGaWVsZFZhbGlkYXRpbmcsXG4gICAgICBpc0ZpZWxkc1ZhbGlkYXRpbmc6IF90aGlzLmlzRmllbGRzVmFsaWRhdGluZyxcbiAgICAgIHJlc2V0RmllbGRzOiBfdGhpcy5yZXNldEZpZWxkcyxcbiAgICAgIHNldEZpZWxkczogX3RoaXMuc2V0RmllbGRzLFxuICAgICAgc2V0RmllbGRWYWx1ZTogX3RoaXMuc2V0RmllbGRWYWx1ZSxcbiAgICAgIHNldEZpZWxkc1ZhbHVlOiBfdGhpcy5zZXRGaWVsZHNWYWx1ZSxcbiAgICAgIHZhbGlkYXRlRmllbGRzOiBfdGhpcy52YWxpZGF0ZUZpZWxkcyxcbiAgICAgIHN1Ym1pdDogX3RoaXMuc3VibWl0LFxuICAgICAgX2luaXQ6IHRydWUsXG4gICAgICBnZXRJbnRlcm5hbEhvb2tzOiBfdGhpcy5nZXRJbnRlcm5hbEhvb2tzXG4gICAgfTtcbiAgfSk7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBJbnRlcm5hbCBIb29rcyA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2V0SW50ZXJuYWxIb29rc1wiLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gSE9PS19NQVJLKSB7XG4gICAgICBfdGhpcy5mb3JtSG9va2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BhdGNoOiBfdGhpcy5kaXNwYXRjaCxcbiAgICAgICAgaW5pdEVudGl0eVZhbHVlOiBfdGhpcy5pbml0RW50aXR5VmFsdWUsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQ6IF90aGlzLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVzZVN1YnNjcmliZTogX3RoaXMudXNlU3Vic2NyaWJlLFxuICAgICAgICBzZXRJbml0aWFsVmFsdWVzOiBfdGhpcy5zZXRJbml0aWFsVmFsdWVzLFxuICAgICAgICBkZXN0cm95Rm9ybTogX3RoaXMuZGVzdHJveUZvcm0sXG4gICAgICAgIHNldENhbGxiYWNrczogX3RoaXMuc2V0Q2FsbGJhY2tzLFxuICAgICAgICBzZXRWYWxpZGF0ZU1lc3NhZ2VzOiBfdGhpcy5zZXRWYWxpZGF0ZU1lc3NhZ2VzLFxuICAgICAgICBnZXRGaWVsZHM6IF90aGlzLmdldEZpZWxkcyxcbiAgICAgICAgc2V0UHJlc2VydmU6IF90aGlzLnNldFByZXNlcnZlLFxuICAgICAgICBnZXRJbml0aWFsVmFsdWU6IF90aGlzLmdldEluaXRpYWxWYWx1ZSxcbiAgICAgICAgcmVnaXN0ZXJXYXRjaDogX3RoaXMucmVnaXN0ZXJXYXRjaFxuICAgICAgfTtcbiAgICB9XG4gICAgd2FybmluZyhmYWxzZSwgJ2BnZXRJbnRlcm5hbEhvb2tzYCBpcyBpbnRlcm5hbCB1c2FnZS4gU2hvdWxkIG5vdCBjYWxsIGRpcmVjdGx5LicpO1xuICAgIHJldHVybiBudWxsO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidXNlU3Vic2NyaWJlXCIsIGZ1bmN0aW9uIChzdWJzY3JpYmFibGUpIHtcbiAgICBfdGhpcy5zdWJzY3JpYmFibGUgPSBzdWJzY3JpYmFibGU7XG4gIH0pO1xuICAvKipcbiAgICogUmVjb3JkIHByZXYgRm9ybSB1bm1vdW50IGZpZWxkRW50aXRpZXMgd2hpY2ggY29uZmlnIHByZXNlcnZlIGZhbHNlLlxuICAgKiBUaGlzIG5lZWQgdG8gYmUgcmVmaWxsIHdpdGggaW5pdGlhbFZhbHVlcyBpbnN0ZWFkIG9mIHN0b3JlIHZhbHVlLlxuICAgKi9cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJldldpdGhvdXRQcmVzZXJ2ZXNcIiwgbnVsbCk7XG4gIC8qKlxuICAgKiBGaXJzdCB0aW1lIGBzZXRJbml0aWFsVmFsdWVzYCBzaG91bGQgdXBkYXRlIHN0b3JlIHdpdGggaW5pdGlhbCB2YWx1ZVxuICAgKi9cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0SW5pdGlhbFZhbHVlc1wiLCBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlcywgaW5pdCkge1xuICAgIF90aGlzLmluaXRpYWxWYWx1ZXMgPSBpbml0aWFsVmFsdWVzIHx8IHt9O1xuICAgIGlmIChpbml0KSB7XG4gICAgICB2YXIgX3RoaXMkcHJldldpdGhvdXRQcmVzO1xuICAgICAgdmFyIG5leHRTdG9yZSA9IG1lcmdlKGluaXRpYWxWYWx1ZXMsIF90aGlzLnN0b3JlKTtcblxuICAgICAgLy8gV2Ugd2lsbCB0YWtlIGNvbnNpZGVyIHByZXYgZm9ybSB1bm1vdW50IGZpZWxkcy5cbiAgICAgIC8vIFdoZW4gdGhlIGZpZWxkIGlzIG5vdCBgcHJlc2VydmVgLCB3ZSBuZWVkIGZpbGwgdGhpcyB3aXRoIGluaXRpYWxWYWx1ZXMgaW5zdGVhZCBvZiBzdG9yZS5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJheS1jYWxsYmFjay1yZXR1cm5cbiAgICAgIChfdGhpcyRwcmV2V2l0aG91dFByZXMgPSBfdGhpcy5wcmV2V2l0aG91dFByZXNlcnZlcykgPT09IG51bGwgfHwgX3RoaXMkcHJldldpdGhvdXRQcmVzID09PSB2b2lkIDAgfHwgX3RoaXMkcHJldldpdGhvdXRQcmVzLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZVBhdGggPSBfcmVmLmtleTtcbiAgICAgICAgbmV4dFN0b3JlID0gc2V0VmFsdWUobmV4dFN0b3JlLCBuYW1lUGF0aCwgZ2V0VmFsdWUoaW5pdGlhbFZhbHVlcywgbmFtZVBhdGgpKTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMucHJldldpdGhvdXRQcmVzZXJ2ZXMgPSBudWxsO1xuICAgICAgX3RoaXMudXBkYXRlU3RvcmUobmV4dFN0b3JlKTtcbiAgICB9XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkZXN0cm95Rm9ybVwiLCBmdW5jdGlvbiAoY2xlYXJPbkRlc3Ryb3kpIHtcbiAgICBpZiAoY2xlYXJPbkRlc3Ryb3kpIHtcbiAgICAgIC8vIGRlc3Ryb3kgZm9ybSByZXNldCBzdG9yZVxuICAgICAgX3RoaXMudXBkYXRlU3RvcmUoe30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaWxsIHByZXNlcnZlIGZpZWxkc1xuICAgICAgdmFyIHByZXZXaXRob3V0UHJlc2VydmVzID0gbmV3IE5hbWVNYXAoKTtcbiAgICAgIF90aGlzLmdldEZpZWxkRW50aXRpZXModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5KSB7XG4gICAgICAgIGlmICghX3RoaXMuaXNNZXJnZWRQcmVzZXJ2ZShlbnRpdHkuaXNQcmVzZXJ2ZSgpKSkge1xuICAgICAgICAgIHByZXZXaXRob3V0UHJlc2VydmVzLnNldChlbnRpdHkuZ2V0TmFtZVBhdGgoKSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgX3RoaXMucHJldldpdGhvdXRQcmVzZXJ2ZXMgPSBwcmV2V2l0aG91dFByZXNlcnZlcztcbiAgICB9XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRJbml0aWFsVmFsdWVcIiwgZnVuY3Rpb24gKG5hbWVQYXRoKSB7XG4gICAgdmFyIGluaXRWYWx1ZSA9IGdldFZhbHVlKF90aGlzLmluaXRpYWxWYWx1ZXMsIG5hbWVQYXRoKTtcblxuICAgIC8vIE5vdCBjbG9uZURlZXAgd2hlbiB3aXRob3V0IGBuYW1lUGF0aGBcbiAgICByZXR1cm4gbmFtZVBhdGgubGVuZ3RoID8gbWVyZ2UoaW5pdFZhbHVlKSA6IGluaXRWYWx1ZTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNldENhbGxiYWNrc1wiLCBmdW5jdGlvbiAoY2FsbGJhY2tzKSB7XG4gICAgX3RoaXMuY2FsbGJhY2tzID0gY2FsbGJhY2tzO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0VmFsaWRhdGVNZXNzYWdlc1wiLCBmdW5jdGlvbiAodmFsaWRhdGVNZXNzYWdlcykge1xuICAgIF90aGlzLnZhbGlkYXRlTWVzc2FnZXMgPSB2YWxpZGF0ZU1lc3NhZ2VzO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0UHJlc2VydmVcIiwgZnVuY3Rpb24gKHByZXNlcnZlKSB7XG4gICAgX3RoaXMucHJlc2VydmUgPSBwcmVzZXJ2ZTtcbiAgfSk7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFdhdGNoID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwid2F0Y2hMaXN0XCIsIFtdKTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVnaXN0ZXJXYXRjaFwiLCBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBfdGhpcy53YXRjaExpc3QucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLndhdGNoTGlzdCA9IF90aGlzLndhdGNoTGlzdC5maWx0ZXIoZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbiAhPT0gY2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibm90aWZ5V2F0Y2hcIiwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBuYW1lUGF0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgLy8gTm8gbmVlZCB0byBjb3N0IHBlcmYgd2hlbiBub3RoaW5nIG5lZWQgdG8gd2F0Y2hcbiAgICBpZiAoX3RoaXMud2F0Y2hMaXN0Lmxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlcyA9IF90aGlzLmdldEZpZWxkc1ZhbHVlKCk7XG4gICAgICB2YXIgYWxsVmFsdWVzID0gX3RoaXMuZ2V0RmllbGRzVmFsdWUodHJ1ZSk7XG4gICAgICBfdGhpcy53YXRjaExpc3QuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sodmFsdWVzLCBhbGxWYWx1ZXMsIG5hbWVQYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IERldiBXYXJuaW5nID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidGltZW91dElkXCIsIG51bGwpO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3YXJuaW5nVW5ob29rZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFfdGhpcy50aW1lb3V0SWQgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIF90aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy50aW1lb3V0SWQgPSBudWxsO1xuICAgICAgICBpZiAoIV90aGlzLmZvcm1Ib29rZWQpIHtcbiAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnSW5zdGFuY2UgY3JlYXRlZCBieSBgdXNlRm9ybWAgaXMgbm90IGNvbm5lY3RlZCB0byBhbnkgRm9ybSBlbGVtZW50LiBGb3JnZXQgdG8gcGFzcyBgZm9ybWAgcHJvcD8nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdG9yZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ1cGRhdGVTdG9yZVwiLCBmdW5jdGlvbiAobmV4dFN0b3JlKSB7XG4gICAgX3RoaXMuc3RvcmUgPSBuZXh0U3RvcmU7XG4gIH0pO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IEZpZWxkcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBHZXQgcmVnaXN0ZXJlZCBmaWVsZCBlbnRpdGllcy5cbiAgICogQHBhcmFtIHB1cmUgT25seSByZXR1cm4gZmllbGQgd2hpY2ggaGFzIGEgYG5hbWVgLiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2V0RmllbGRFbnRpdGllc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHB1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGlmICghcHVyZSkge1xuICAgICAgcmV0dXJuIF90aGlzLmZpZWxkRW50aXRpZXM7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcy5maWVsZEVudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHJldHVybiBmaWVsZC5nZXROYW1lUGF0aCgpLmxlbmd0aDtcbiAgICB9KTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldEZpZWxkc01hcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHB1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIHZhciBjYWNoZSA9IG5ldyBOYW1lTWFwKCk7XG4gICAgX3RoaXMuZ2V0RmllbGRFbnRpdGllcyhwdXJlKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgdmFyIG5hbWVQYXRoID0gZmllbGQuZ2V0TmFtZVBhdGgoKTtcbiAgICAgIGNhY2hlLnNldChuYW1lUGF0aCwgZmllbGQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjYWNoZTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldEZpZWxkRW50aXRpZXNGb3JOYW1lUGF0aExpc3RcIiwgZnVuY3Rpb24gKG5hbWVMaXN0KSB7XG4gICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgcmV0dXJuIF90aGlzLmdldEZpZWxkRW50aXRpZXModHJ1ZSk7XG4gICAgfVxuICAgIHZhciBjYWNoZSA9IF90aGlzLmdldEZpZWxkc01hcCh0cnVlKTtcbiAgICByZXR1cm4gbmFtZUxpc3QubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgbmFtZVBhdGggPSBnZXROYW1lUGF0aChuYW1lKTtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQobmFtZVBhdGgpIHx8IHtcbiAgICAgICAgSU5WQUxJREFURV9OQU1FX1BBVEg6IGdldE5hbWVQYXRoKG5hbWUpXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2V0RmllbGRzVmFsdWVcIiwgZnVuY3Rpb24gKG5hbWVMaXN0LCBmaWx0ZXJGdW5jKSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG5cbiAgICAvLyBGaWxsIGFyZ3NcbiAgICB2YXIgbWVyZ2VkTmFtZUxpc3Q7XG4gICAgdmFyIG1lcmdlZEZpbHRlckZ1bmM7XG4gICAgdmFyIG1lcmdlZFN0cmljdDtcbiAgICBpZiAobmFtZUxpc3QgPT09IHRydWUgfHwgQXJyYXkuaXNBcnJheShuYW1lTGlzdCkpIHtcbiAgICAgIG1lcmdlZE5hbWVMaXN0ID0gbmFtZUxpc3Q7XG4gICAgICBtZXJnZWRGaWx0ZXJGdW5jID0gZmlsdGVyRnVuYztcbiAgICB9IGVsc2UgaWYgKG5hbWVMaXN0ICYmIF90eXBlb2YobmFtZUxpc3QpID09PSAnb2JqZWN0Jykge1xuICAgICAgbWVyZ2VkU3RyaWN0ID0gbmFtZUxpc3Quc3RyaWN0O1xuICAgICAgbWVyZ2VkRmlsdGVyRnVuYyA9IG5hbWVMaXN0LmZpbHRlcjtcbiAgICB9XG4gICAgaWYgKG1lcmdlZE5hbWVMaXN0ID09PSB0cnVlICYmICFtZXJnZWRGaWx0ZXJGdW5jKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RvcmU7XG4gICAgfVxuICAgIHZhciBmaWVsZEVudGl0aWVzID0gX3RoaXMuZ2V0RmllbGRFbnRpdGllc0Zvck5hbWVQYXRoTGlzdChBcnJheS5pc0FycmF5KG1lcmdlZE5hbWVMaXN0KSA/IG1lcmdlZE5hbWVMaXN0IDogbnVsbCk7XG4gICAgdmFyIGZpbHRlcmVkTmFtZUxpc3QgPSBbXTtcbiAgICBmaWVsZEVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgdmFyIF9pc0xpc3RGaWVsZCwgX3JlZjM7XG4gICAgICB2YXIgbmFtZVBhdGggPSAnSU5WQUxJREFURV9OQU1FX1BBVEgnIGluIGVudGl0eSA/IGVudGl0eS5JTlZBTElEQVRFX05BTUVfUEFUSCA6IGVudGl0eS5nZXROYW1lUGF0aCgpO1xuXG4gICAgICAvLyBJZ25vcmUgd2hlbiBpdCdzIGEgbGlzdCBpdGVtIGFuZCBub3Qgc3BlY2lmaWMgdGhlIG5hbWVQYXRoLFxuICAgICAgLy8gc2luY2UgcGFyZW50IGZpZWxkIGlzIGFscmVhZHkgdGFrZSBpbiBjb3VudFxuICAgICAgaWYgKG1lcmdlZFN0cmljdCkge1xuICAgICAgICB2YXIgX2lzTGlzdCwgX3JlZjI7XG4gICAgICAgIGlmICgoX2lzTGlzdCA9IChfcmVmMiA9IGVudGl0eSkuaXNMaXN0KSAhPT0gbnVsbCAmJiBfaXNMaXN0ICE9PSB2b2lkIDAgJiYgX2lzTGlzdC5jYWxsKF9yZWYyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghbWVyZ2VkTmFtZUxpc3QgJiYgKF9pc0xpc3RGaWVsZCA9IChfcmVmMyA9IGVudGl0eSkuaXNMaXN0RmllbGQpICE9PSBudWxsICYmIF9pc0xpc3RGaWVsZCAhPT0gdm9pZCAwICYmIF9pc0xpc3RGaWVsZC5jYWxsKF9yZWYzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW1lcmdlZEZpbHRlckZ1bmMpIHtcbiAgICAgICAgZmlsdGVyZWROYW1lTGlzdC5wdXNoKG5hbWVQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBtZXRhID0gJ2dldE1ldGEnIGluIGVudGl0eSA/IGVudGl0eS5nZXRNZXRhKCkgOiBudWxsO1xuICAgICAgICBpZiAobWVyZ2VkRmlsdGVyRnVuYyhtZXRhKSkge1xuICAgICAgICAgIGZpbHRlcmVkTmFtZUxpc3QucHVzaChuYW1lUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmVCeU5hbWVQYXRoTGlzdChfdGhpcy5zdG9yZSwgZmlsdGVyZWROYW1lTGlzdC5tYXAoZ2V0TmFtZVBhdGgpKTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldEZpZWxkVmFsdWVcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBfdGhpcy53YXJuaW5nVW5ob29rZWQoKTtcbiAgICB2YXIgbmFtZVBhdGggPSBnZXROYW1lUGF0aChuYW1lKTtcbiAgICByZXR1cm4gZ2V0VmFsdWUoX3RoaXMuc3RvcmUsIG5hbWVQYXRoKTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldEZpZWxkc0Vycm9yXCIsIGZ1bmN0aW9uIChuYW1lTGlzdCkge1xuICAgIF90aGlzLndhcm5pbmdVbmhvb2tlZCgpO1xuICAgIHZhciBmaWVsZEVudGl0aWVzID0gX3RoaXMuZ2V0RmllbGRFbnRpdGllc0Zvck5hbWVQYXRoTGlzdChuYW1lTGlzdCk7XG4gICAgcmV0dXJuIGZpZWxkRW50aXRpZXMubWFwKGZ1bmN0aW9uIChlbnRpdHksIGluZGV4KSB7XG4gICAgICBpZiAoZW50aXR5ICYmICEoJ0lOVkFMSURBVEVfTkFNRV9QQVRIJyBpbiBlbnRpdHkpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogZW50aXR5LmdldE5hbWVQYXRoKCksXG4gICAgICAgICAgZXJyb3JzOiBlbnRpdHkuZ2V0RXJyb3JzKCksXG4gICAgICAgICAgd2FybmluZ3M6IGVudGl0eS5nZXRXYXJuaW5ncygpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBnZXROYW1lUGF0aChuYW1lTGlzdFtpbmRleF0pLFxuICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICB3YXJuaW5nczogW11cbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRGaWVsZEVycm9yXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG4gICAgdmFyIG5hbWVQYXRoID0gZ2V0TmFtZVBhdGgobmFtZSk7XG4gICAgdmFyIGZpZWxkRXJyb3IgPSBfdGhpcy5nZXRGaWVsZHNFcnJvcihbbmFtZVBhdGhdKVswXTtcbiAgICByZXR1cm4gZmllbGRFcnJvci5lcnJvcnM7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRGaWVsZFdhcm5pbmdcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBfdGhpcy53YXJuaW5nVW5ob29rZWQoKTtcbiAgICB2YXIgbmFtZVBhdGggPSBnZXROYW1lUGF0aChuYW1lKTtcbiAgICB2YXIgZmllbGRFcnJvciA9IF90aGlzLmdldEZpZWxkc0Vycm9yKFtuYW1lUGF0aF0pWzBdO1xuICAgIHJldHVybiBmaWVsZEVycm9yLndhcm5pbmdzO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNGaWVsZHNUb3VjaGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpcy53YXJuaW5nVW5ob29rZWQoKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHZhciBhcmcwID0gYXJnc1swXSxcbiAgICAgIGFyZzEgPSBhcmdzWzFdO1xuICAgIHZhciBuYW1lUGF0aExpc3Q7XG4gICAgdmFyIGlzQWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbmFtZVBhdGhMaXN0ID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcwKSkge1xuICAgICAgICBuYW1lUGF0aExpc3QgPSBhcmcwLm1hcChnZXROYW1lUGF0aCk7XG4gICAgICAgIGlzQWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZVBhdGhMaXN0ID0gbnVsbDtcbiAgICAgICAgaXNBbGxGaWVsZHNUb3VjaGVkID0gYXJnMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZVBhdGhMaXN0ID0gYXJnMC5tYXAoZ2V0TmFtZVBhdGgpO1xuICAgICAgaXNBbGxGaWVsZHNUb3VjaGVkID0gYXJnMTtcbiAgICB9XG4gICAgdmFyIGZpZWxkRW50aXRpZXMgPSBfdGhpcy5nZXRGaWVsZEVudGl0aWVzKHRydWUpO1xuICAgIHZhciBpc0ZpZWxkVG91Y2hlZCA9IGZ1bmN0aW9uIGlzRmllbGRUb3VjaGVkKGZpZWxkKSB7XG4gICAgICByZXR1cm4gZmllbGQuaXNGaWVsZFRvdWNoZWQoKTtcbiAgICB9O1xuXG4gICAgLy8gPT09PT0gV2lsbCBnZXQgZnVsbHkgY29tcGFyZSB3aGVuIG5vdCBjb25maWcgbmFtZVBhdGhMaXN0ID09PT09XG4gICAgaWYgKCFuYW1lUGF0aExpc3QpIHtcbiAgICAgIHJldHVybiBpc0FsbEZpZWxkc1RvdWNoZWQgPyBmaWVsZEVudGl0aWVzLmV2ZXJ5KGZ1bmN0aW9uIChlbnRpdHkpIHtcbiAgICAgICAgcmV0dXJuIGlzRmllbGRUb3VjaGVkKGVudGl0eSkgfHwgZW50aXR5LmlzTGlzdCgpO1xuICAgICAgfSkgOiBmaWVsZEVudGl0aWVzLnNvbWUoaXNGaWVsZFRvdWNoZWQpO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGEgbmVzdCB0cmVlIGZvciB2YWxpZGF0ZVxuICAgIHZhciBtYXAgPSBuZXcgTmFtZU1hcCgpO1xuICAgIG5hbWVQYXRoTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzaG9ydE5hbWVQYXRoKSB7XG4gICAgICBtYXAuc2V0KHNob3J0TmFtZVBhdGgsIFtdKTtcbiAgICB9KTtcbiAgICBmaWVsZEVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICB2YXIgZmllbGROYW1lUGF0aCA9IGZpZWxkLmdldE5hbWVQYXRoKCk7XG5cbiAgICAgIC8vIEZpbmQgbWF0Y2hlZCBlbnRpdHkgYW5kIHB1dCBpbnRvIGxpc3RcbiAgICAgIG5hbWVQYXRoTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzaG9ydE5hbWVQYXRoKSB7XG4gICAgICAgIGlmIChzaG9ydE5hbWVQYXRoLmV2ZXJ5KGZ1bmN0aW9uIChuYW1lVW5pdCwgaSkge1xuICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVQYXRoW2ldID09PSBuYW1lVW5pdDtcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICBtYXAudXBkYXRlKHNob3J0TmFtZVBhdGgsIGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShsaXN0KSwgW2ZpZWxkXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgaWYgTmFtZU1hcCB2YWx1ZSBpcyB0b3VjaGVkXG4gICAgdmFyIGlzTmFtZVBhdGhMaXN0VG91Y2hlZCA9IGZ1bmN0aW9uIGlzTmFtZVBhdGhMaXN0VG91Y2hlZChlbnRpdGllcykge1xuICAgICAgcmV0dXJuIGVudGl0aWVzLnNvbWUoaXNGaWVsZFRvdWNoZWQpO1xuICAgIH07XG4gICAgdmFyIG5hbWVQYXRoTGlzdEVudGl0aWVzID0gbWFwLm1hcChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9yZWY0LnZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBpc0FsbEZpZWxkc1RvdWNoZWQgPyBuYW1lUGF0aExpc3RFbnRpdGllcy5ldmVyeShpc05hbWVQYXRoTGlzdFRvdWNoZWQpIDogbmFtZVBhdGhMaXN0RW50aXRpZXMuc29tZShpc05hbWVQYXRoTGlzdFRvdWNoZWQpO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNGaWVsZFRvdWNoZWRcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBfdGhpcy53YXJuaW5nVW5ob29rZWQoKTtcbiAgICByZXR1cm4gX3RoaXMuaXNGaWVsZHNUb3VjaGVkKFtuYW1lXSk7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpc0ZpZWxkc1ZhbGlkYXRpbmdcIiwgZnVuY3Rpb24gKG5hbWVMaXN0KSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG4gICAgdmFyIGZpZWxkRW50aXRpZXMgPSBfdGhpcy5nZXRGaWVsZEVudGl0aWVzKCk7XG4gICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgcmV0dXJuIGZpZWxkRW50aXRpZXMuc29tZShmdW5jdGlvbiAodGVzdEZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0ZXN0RmllbGQuaXNGaWVsZFZhbGlkYXRpbmcoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgbmFtZVBhdGhMaXN0ID0gbmFtZUxpc3QubWFwKGdldE5hbWVQYXRoKTtcbiAgICByZXR1cm4gZmllbGRFbnRpdGllcy5zb21lKGZ1bmN0aW9uICh0ZXN0RmllbGQpIHtcbiAgICAgIHZhciBmaWVsZE5hbWVQYXRoID0gdGVzdEZpZWxkLmdldE5hbWVQYXRoKCk7XG4gICAgICByZXR1cm4gY29udGFpbnNOYW1lUGF0aChuYW1lUGF0aExpc3QsIGZpZWxkTmFtZVBhdGgpICYmIHRlc3RGaWVsZC5pc0ZpZWxkVmFsaWRhdGluZygpO1xuICAgIH0pO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNGaWVsZFZhbGlkYXRpbmdcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBfdGhpcy53YXJuaW5nVW5ob29rZWQoKTtcbiAgICByZXR1cm4gX3RoaXMuaXNGaWVsZHNWYWxpZGF0aW5nKFtuYW1lXSk7XG4gIH0pO1xuICAvKipcbiAgICogUmVzZXQgRmllbGQgd2l0aCBmaWVsZCBgaW5pdGlhbFZhbHVlYCBwcm9wLlxuICAgKiBDYW4gcGFzcyBgZW50aXRpZXNgIG9yIGBuYW1lUGF0aExpc3RgIG9yIGp1c3Qgbm90aGluZy5cbiAgICovXG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlc2V0V2l0aEZpZWxkSW5pdGlhbFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5mbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gQ3JlYXRlIGNhY2hlXG4gICAgdmFyIGNhY2hlID0gbmV3IE5hbWVNYXAoKTtcbiAgICB2YXIgZmllbGRFbnRpdGllcyA9IF90aGlzLmdldEZpZWxkRW50aXRpZXModHJ1ZSk7XG4gICAgZmllbGRFbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IGZpZWxkLnByb3BzLmluaXRpYWxWYWx1ZTtcbiAgICAgIHZhciBuYW1lUGF0aCA9IGZpZWxkLmdldE5hbWVQYXRoKCk7XG5cbiAgICAgIC8vIFJlY29yZCBvbmx5IGlmIGhhcyBgaW5pdGlhbFZhbHVlYFxuICAgICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciByZWNvcmRzID0gY2FjaGUuZ2V0KG5hbWVQYXRoKSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHJlY29yZHMuYWRkKHtcbiAgICAgICAgICBlbnRpdHk6IGZpZWxkLFxuICAgICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNhY2hlLnNldChuYW1lUGF0aCwgcmVjb3Jkcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZXNldFxuICAgIHZhciByZXNldFdpdGhGaWVsZHMgPSBmdW5jdGlvbiByZXNldFdpdGhGaWVsZHMoZW50aXRpZXMpIHtcbiAgICAgIGVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBmaWVsZC5wcm9wcy5pbml0aWFsVmFsdWU7XG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuYW1lUGF0aCA9IGZpZWxkLmdldE5hbWVQYXRoKCk7XG4gICAgICAgICAgdmFyIGZvcm1Jbml0aWFsVmFsdWUgPSBfdGhpcy5nZXRJbml0aWFsVmFsdWUobmFtZVBhdGgpO1xuICAgICAgICAgIGlmIChmb3JtSW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFdhcm5pbmcgaWYgY29uZmxpY3Qgd2l0aCBmb3JtIGluaXRpYWxWYWx1ZXMgYW5kIGRvIG5vdCBtb2RpZnkgdmFsdWVcbiAgICAgICAgICAgIHdhcm5pbmcoZmFsc2UsIFwiRm9ybSBhbHJlYWR5IHNldCAnaW5pdGlhbFZhbHVlcycgd2l0aCBwYXRoICdcIi5jb25jYXQobmFtZVBhdGguam9pbignLicpLCBcIicuIEZpZWxkIGNhbiBub3Qgb3ZlcndyaXRlIGl0LlwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciByZWNvcmRzID0gY2FjaGUuZ2V0KG5hbWVQYXRoKTtcbiAgICAgICAgICAgIGlmIChyZWNvcmRzICYmIHJlY29yZHMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgLy8gV2FybmluZyBpZiBtdWx0aXBsZSBmaWVsZCBzZXQgYGluaXRpYWxWYWx1ZWBhbmQgZG8gbm90IG1vZGlmeSB2YWx1ZVxuICAgICAgICAgICAgICB3YXJuaW5nKGZhbHNlLCBcIk11bHRpcGxlIEZpZWxkIHdpdGggcGF0aCAnXCIuY29uY2F0KG5hbWVQYXRoLmpvaW4oJy4nKSwgXCInIHNldCAnaW5pdGlhbFZhbHVlJy4gQ2FuIG5vdCBkZWNpZGUgd2hpY2ggb25lIHRvIHBpY2suXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3Jkcykge1xuICAgICAgICAgICAgICB2YXIgb3JpZ2luVmFsdWUgPSBfdGhpcy5nZXRGaWVsZFZhbHVlKG5hbWVQYXRoKTtcbiAgICAgICAgICAgICAgdmFyIGlzTGlzdEZpZWxkID0gZmllbGQuaXNMaXN0RmllbGQoKTtcblxuICAgICAgICAgICAgICAvLyBTZXQgYGluaXRpYWxWYWx1ZWBcbiAgICAgICAgICAgICAgaWYgKCFpc0xpc3RGaWVsZCAmJiAoIWluZm8uc2tpcEV4aXN0IHx8IG9yaWdpblZhbHVlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlU3RvcmUoc2V0VmFsdWUoX3RoaXMuc3RvcmUsIG5hbWVQYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkocmVjb3JkcylbMF0udmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgcmVxdWlyZWRGaWVsZEVudGl0aWVzO1xuICAgIGlmIChpbmZvLmVudGl0aWVzKSB7XG4gICAgICByZXF1aXJlZEZpZWxkRW50aXRpZXMgPSBpbmZvLmVudGl0aWVzO1xuICAgIH0gZWxzZSBpZiAoaW5mby5uYW1lUGF0aExpc3QpIHtcbiAgICAgIHJlcXVpcmVkRmllbGRFbnRpdGllcyA9IFtdO1xuICAgICAgaW5mby5uYW1lUGF0aExpc3QuZm9yRWFjaChmdW5jdGlvbiAobmFtZVBhdGgpIHtcbiAgICAgICAgdmFyIHJlY29yZHMgPSBjYWNoZS5nZXQobmFtZVBhdGgpO1xuICAgICAgICBpZiAocmVjb3Jkcykge1xuICAgICAgICAgIHZhciBfcmVxdWlyZWRGaWVsZEVudGl0aWU7XG4gICAgICAgICAgKF9yZXF1aXJlZEZpZWxkRW50aXRpZSA9IHJlcXVpcmVkRmllbGRFbnRpdGllcykucHVzaC5hcHBseShfcmVxdWlyZWRGaWVsZEVudGl0aWUsIF90b0NvbnN1bWFibGVBcnJheShfdG9Db25zdW1hYmxlQXJyYXkocmVjb3JkcykubWFwKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICByZXR1cm4gci5lbnRpdHk7XG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVpcmVkRmllbGRFbnRpdGllcyA9IGZpZWxkRW50aXRpZXM7XG4gICAgfVxuICAgIHJlc2V0V2l0aEZpZWxkcyhyZXF1aXJlZEZpZWxkRW50aXRpZXMpO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzZXRGaWVsZHNcIiwgZnVuY3Rpb24gKG5hbWVMaXN0KSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG4gICAgdmFyIHByZXZTdG9yZSA9IF90aGlzLnN0b3JlO1xuICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgIF90aGlzLnVwZGF0ZVN0b3JlKG1lcmdlKF90aGlzLmluaXRpYWxWYWx1ZXMpKTtcbiAgICAgIF90aGlzLnJlc2V0V2l0aEZpZWxkSW5pdGlhbFZhbHVlKCk7XG4gICAgICBfdGhpcy5ub3RpZnlPYnNlcnZlcnMocHJldlN0b3JlLCBudWxsLCB7XG4gICAgICAgIHR5cGU6ICdyZXNldCdcbiAgICAgIH0pO1xuICAgICAgX3RoaXMubm90aWZ5V2F0Y2goKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBieSBgbmFtZUxpc3RgXG4gICAgdmFyIG5hbWVQYXRoTGlzdCA9IG5hbWVMaXN0Lm1hcChnZXROYW1lUGF0aCk7XG4gICAgbmFtZVBhdGhMaXN0LmZvckVhY2goZnVuY3Rpb24gKG5hbWVQYXRoKSB7XG4gICAgICB2YXIgaW5pdGlhbFZhbHVlID0gX3RoaXMuZ2V0SW5pdGlhbFZhbHVlKG5hbWVQYXRoKTtcbiAgICAgIF90aGlzLnVwZGF0ZVN0b3JlKHNldFZhbHVlKF90aGlzLnN0b3JlLCBuYW1lUGF0aCwgaW5pdGlhbFZhbHVlKSk7XG4gICAgfSk7XG4gICAgX3RoaXMucmVzZXRXaXRoRmllbGRJbml0aWFsVmFsdWUoe1xuICAgICAgbmFtZVBhdGhMaXN0OiBuYW1lUGF0aExpc3RcbiAgICB9KTtcbiAgICBfdGhpcy5ub3RpZnlPYnNlcnZlcnMocHJldlN0b3JlLCBuYW1lUGF0aExpc3QsIHtcbiAgICAgIHR5cGU6ICdyZXNldCdcbiAgICB9KTtcbiAgICBfdGhpcy5ub3RpZnlXYXRjaChuYW1lUGF0aExpc3QpO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0RmllbGRzXCIsIGZ1bmN0aW9uIChmaWVsZHMpIHtcbiAgICBfdGhpcy53YXJuaW5nVW5ob29rZWQoKTtcbiAgICB2YXIgcHJldlN0b3JlID0gX3RoaXMuc3RvcmU7XG4gICAgdmFyIG5hbWVQYXRoTGlzdCA9IFtdO1xuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZERhdGEpIHtcbiAgICAgIHZhciBuYW1lID0gZmllbGREYXRhLm5hbWUsXG4gICAgICAgIGRhdGEgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZmllbGREYXRhLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIG5hbWVQYXRoID0gZ2V0TmFtZVBhdGgobmFtZSk7XG4gICAgICBuYW1lUGF0aExpc3QucHVzaChuYW1lUGF0aCk7XG5cbiAgICAgIC8vIFZhbHVlXG4gICAgICBpZiAoJ3ZhbHVlJyBpbiBkYXRhKSB7XG4gICAgICAgIF90aGlzLnVwZGF0ZVN0b3JlKHNldFZhbHVlKF90aGlzLnN0b3JlLCBuYW1lUGF0aCwgZGF0YS52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgX3RoaXMubm90aWZ5T2JzZXJ2ZXJzKHByZXZTdG9yZSwgW25hbWVQYXRoXSwge1xuICAgICAgICB0eXBlOiAnc2V0RmllbGQnLFxuICAgICAgICBkYXRhOiBmaWVsZERhdGFcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIF90aGlzLm5vdGlmeVdhdGNoKG5hbWVQYXRoTGlzdCk7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRGaWVsZHNcIiwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRpdGllcyA9IF90aGlzLmdldEZpZWxkRW50aXRpZXModHJ1ZSk7XG4gICAgdmFyIGZpZWxkcyA9IGVudGl0aWVzLm1hcChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHZhciBuYW1lUGF0aCA9IGZpZWxkLmdldE5hbWVQYXRoKCk7XG4gICAgICB2YXIgbWV0YSA9IGZpZWxkLmdldE1ldGEoKTtcbiAgICAgIHZhciBmaWVsZERhdGEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1ldGEpLCB7fSwge1xuICAgICAgICBuYW1lOiBuYW1lUGF0aCxcbiAgICAgICAgdmFsdWU6IF90aGlzLmdldEZpZWxkVmFsdWUobmFtZVBhdGgpXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZERhdGEsICdvcmlnaW5SQ0ZpZWxkJywge1xuICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmllbGREYXRhO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWVsZHM7XG4gIH0pO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gT2JzZXJ2ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBUaGlzIG9ubHkgdHJpZ2dlciB3aGVuIGEgZmllbGQgaXMgb24gY29uc3RydWN0b3IgdG8gYXZvaWQgd2UgZ2V0IGluaXRpYWxWYWx1ZSB0b28gbGF0ZVxuICAgKi9cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5pdEVudGl0eVZhbHVlXCIsIGZ1bmN0aW9uIChlbnRpdHkpIHtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gZW50aXR5LnByb3BzLmluaXRpYWxWYWx1ZTtcbiAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBuYW1lUGF0aCA9IGVudGl0eS5nZXROYW1lUGF0aCgpO1xuICAgICAgdmFyIHByZXZWYWx1ZSA9IGdldFZhbHVlKF90aGlzLnN0b3JlLCBuYW1lUGF0aCk7XG4gICAgICBpZiAocHJldlZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX3RoaXMudXBkYXRlU3RvcmUoc2V0VmFsdWUoX3RoaXMuc3RvcmUsIG5hbWVQYXRoLCBpbml0aWFsVmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpc01lcmdlZFByZXNlcnZlXCIsIGZ1bmN0aW9uIChmaWVsZFByZXNlcnZlKSB7XG4gICAgdmFyIG1lcmdlZFByZXNlcnZlID0gZmllbGRQcmVzZXJ2ZSAhPT0gdW5kZWZpbmVkID8gZmllbGRQcmVzZXJ2ZSA6IF90aGlzLnByZXNlcnZlO1xuICAgIHJldHVybiBtZXJnZWRQcmVzZXJ2ZSAhPT0gbnVsbCAmJiBtZXJnZWRQcmVzZXJ2ZSAhPT0gdm9pZCAwID8gbWVyZ2VkUHJlc2VydmUgOiB0cnVlO1xuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVnaXN0ZXJGaWVsZFwiLCBmdW5jdGlvbiAoZW50aXR5KSB7XG4gICAgX3RoaXMuZmllbGRFbnRpdGllcy5wdXNoKGVudGl0eSk7XG4gICAgdmFyIG5hbWVQYXRoID0gZW50aXR5LmdldE5hbWVQYXRoKCk7XG4gICAgX3RoaXMubm90aWZ5V2F0Y2goW25hbWVQYXRoXSk7XG5cbiAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcbiAgICBpZiAoZW50aXR5LnByb3BzLmluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcHJldlN0b3JlID0gX3RoaXMuc3RvcmU7XG4gICAgICBfdGhpcy5yZXNldFdpdGhGaWVsZEluaXRpYWxWYWx1ZSh7XG4gICAgICAgIGVudGl0aWVzOiBbZW50aXR5XSxcbiAgICAgICAgc2tpcEV4aXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm5vdGlmeU9ic2VydmVycyhwcmV2U3RvcmUsIFtlbnRpdHkuZ2V0TmFtZVBhdGgoKV0sIHtcbiAgICAgICAgdHlwZTogJ3ZhbHVlVXBkYXRlJyxcbiAgICAgICAgc291cmNlOiAnaW50ZXJuYWwnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB1bi1yZWdpc3RlciBmaWVsZCBjYWxsYmFja1xuICAgIHJldHVybiBmdW5jdGlvbiAoaXNMaXN0RmllbGQsIHByZXNlcnZlKSB7XG4gICAgICB2YXIgc3ViTmFtZVBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IFtdO1xuICAgICAgX3RoaXMuZmllbGRFbnRpdGllcyA9IF90aGlzLmZpZWxkRW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBlbnRpdHk7XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgc3RvcmUgdmFsdWUgaWYgbm90IHByZXNlcnZlXG4gICAgICBpZiAoIV90aGlzLmlzTWVyZ2VkUHJlc2VydmUocHJlc2VydmUpICYmICghaXNMaXN0RmllbGQgfHwgc3ViTmFtZVBhdGgubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IGlzTGlzdEZpZWxkID8gdW5kZWZpbmVkIDogX3RoaXMuZ2V0SW5pdGlhbFZhbHVlKG5hbWVQYXRoKTtcbiAgICAgICAgaWYgKG5hbWVQYXRoLmxlbmd0aCAmJiBfdGhpcy5nZXRGaWVsZFZhbHVlKG5hbWVQYXRoKSAhPT0gZGVmYXVsdFZhbHVlICYmIF90aGlzLmZpZWxkRW50aXRpZXMuZXZlcnkoZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIC8vIE9ubHkgcmVzZXQgd2hlbiBubyBuYW1lUGF0aCBleGlzdFxuICAgICAgICAgICAgIW1hdGNoTmFtZVBhdGgoZmllbGQuZ2V0TmFtZVBhdGgoKSwgbmFtZVBhdGgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICB2YXIgX3ByZXZTdG9yZSA9IF90aGlzLnN0b3JlO1xuICAgICAgICAgIF90aGlzLnVwZGF0ZVN0b3JlKHNldFZhbHVlKF9wcmV2U3RvcmUsIG5hbWVQYXRoLCBkZWZhdWx0VmFsdWUsIHRydWUpKTtcblxuICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IGZpZWxkIGlzIHVubW91bnRcbiAgICAgICAgICBfdGhpcy5ub3RpZnlPYnNlcnZlcnMoX3ByZXZTdG9yZSwgW25hbWVQYXRoXSwge1xuICAgICAgICAgICAgdHlwZTogJ3JlbW92ZSdcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIERlcGVuZGVuY2llcyB1cGRhdGVcbiAgICAgICAgICBfdGhpcy50cmlnZ2VyRGVwZW5kZW5jaWVzVXBkYXRlKF9wcmV2U3RvcmUsIG5hbWVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMubm90aWZ5V2F0Y2goW25hbWVQYXRoXSk7XG4gICAgfTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRpc3BhdGNoXCIsIGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICd1cGRhdGVWYWx1ZSc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbmFtZVBhdGggPSBhY3Rpb24ubmFtZVBhdGgsXG4gICAgICAgICAgICB2YWx1ZSA9IGFjdGlvbi52YWx1ZTtcbiAgICAgICAgICBfdGhpcy51cGRhdGVWYWx1ZShuYW1lUGF0aCwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICd2YWxpZGF0ZUZpZWxkJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfbmFtZVBhdGggPSBhY3Rpb24ubmFtZVBhdGgsXG4gICAgICAgICAgICB0cmlnZ2VyTmFtZSA9IGFjdGlvbi50cmlnZ2VyTmFtZTtcbiAgICAgICAgICBfdGhpcy52YWxpZGF0ZUZpZWxkcyhbX25hbWVQYXRoXSwge1xuICAgICAgICAgICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJOYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgaGF2ZSBvdGhlciBhY3Rpb24uIERvIG5vdGhpbmcuXG4gICAgfVxuICB9KTtcbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibm90aWZ5T2JzZXJ2ZXJzXCIsIGZ1bmN0aW9uIChwcmV2U3RvcmUsIG5hbWVQYXRoTGlzdCwgaW5mbykge1xuICAgIGlmIChfdGhpcy5zdWJzY3JpYmFibGUpIHtcbiAgICAgIHZhciBtZXJnZWRJbmZvID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBpbmZvKSwge30sIHtcbiAgICAgICAgc3RvcmU6IF90aGlzLmdldEZpZWxkc1ZhbHVlKHRydWUpXG4gICAgICB9KTtcbiAgICAgIF90aGlzLmdldEZpZWxkRW50aXRpZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICB2YXIgb25TdG9yZUNoYW5nZSA9IF9yZWY1Lm9uU3RvcmVDaGFuZ2U7XG4gICAgICAgIG9uU3RvcmVDaGFuZ2UocHJldlN0b3JlLCBuYW1lUGF0aExpc3QsIG1lcmdlZEluZm8pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzLmZvcmNlUm9vdFVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBOb3RpZnkgZGVwZW5kZW5jaWVzIGNoaWxkcmVuIHdpdGggcGFyZW50IHVwZGF0ZVxuICAgKiBXZSBuZWVkIGRlbGF5IHRvIHRyaWdnZXIgdmFsaWRhdGUgaW4gY2FzZSBGaWVsZCBpcyB1bmRlciByZW5kZXIgcHJvcHNcbiAgICovXG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRyaWdnZXJEZXBlbmRlbmNpZXNVcGRhdGVcIiwgZnVuY3Rpb24gKHByZXZTdG9yZSwgbmFtZVBhdGgpIHtcbiAgICB2YXIgY2hpbGRyZW5GaWVsZHMgPSBfdGhpcy5nZXREZXBlbmRlbmN5Q2hpbGRyZW5GaWVsZHMobmFtZVBhdGgpO1xuICAgIGlmIChjaGlsZHJlbkZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIF90aGlzLnZhbGlkYXRlRmllbGRzKGNoaWxkcmVuRmllbGRzKTtcbiAgICB9XG4gICAgX3RoaXMubm90aWZ5T2JzZXJ2ZXJzKHByZXZTdG9yZSwgY2hpbGRyZW5GaWVsZHMsIHtcbiAgICAgIHR5cGU6ICdkZXBlbmRlbmNpZXNVcGRhdGUnLFxuICAgICAgcmVsYXRlZEZpZWxkczogW25hbWVQYXRoXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNoaWxkcmVuRmllbGRzKSlcbiAgICB9KTtcbiAgICByZXR1cm4gY2hpbGRyZW5GaWVsZHM7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ1cGRhdGVWYWx1ZVwiLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgbmFtZVBhdGggPSBnZXROYW1lUGF0aChuYW1lKTtcbiAgICB2YXIgcHJldlN0b3JlID0gX3RoaXMuc3RvcmU7XG4gICAgX3RoaXMudXBkYXRlU3RvcmUoc2V0VmFsdWUoX3RoaXMuc3RvcmUsIG5hbWVQYXRoLCB2YWx1ZSkpO1xuICAgIF90aGlzLm5vdGlmeU9ic2VydmVycyhwcmV2U3RvcmUsIFtuYW1lUGF0aF0sIHtcbiAgICAgIHR5cGU6ICd2YWx1ZVVwZGF0ZScsXG4gICAgICBzb3VyY2U6ICdpbnRlcm5hbCdcbiAgICB9KTtcbiAgICBfdGhpcy5ub3RpZnlXYXRjaChbbmFtZVBhdGhdKTtcblxuICAgIC8vIERlcGVuZGVuY2llcyB1cGRhdGVcbiAgICB2YXIgY2hpbGRyZW5GaWVsZHMgPSBfdGhpcy50cmlnZ2VyRGVwZW5kZW5jaWVzVXBkYXRlKHByZXZTdG9yZSwgbmFtZVBhdGgpO1xuXG4gICAgLy8gdHJpZ2dlciBjYWxsYmFjayBmdW5jdGlvblxuICAgIHZhciBvblZhbHVlc0NoYW5nZSA9IF90aGlzLmNhbGxiYWNrcy5vblZhbHVlc0NoYW5nZTtcbiAgICBpZiAob25WYWx1ZXNDaGFuZ2UpIHtcbiAgICAgIHZhciBjaGFuZ2VkVmFsdWVzID0gY2xvbmVCeU5hbWVQYXRoTGlzdChfdGhpcy5zdG9yZSwgW25hbWVQYXRoXSk7XG4gICAgICBvblZhbHVlc0NoYW5nZShjaGFuZ2VkVmFsdWVzLCBfdGhpcy5nZXRGaWVsZHNWYWx1ZSgpKTtcbiAgICB9XG4gICAgX3RoaXMudHJpZ2dlck9uRmllbGRzQ2hhbmdlKFtuYW1lUGF0aF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjaGlsZHJlbkZpZWxkcykpKTtcbiAgfSk7XG4gIC8vIExldCBhbGwgY2hpbGQgRmllbGQgZ2V0IHVwZGF0ZS5cbiAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0RmllbGRzVmFsdWVcIiwgZnVuY3Rpb24gKHN0b3JlKSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG4gICAgdmFyIHByZXZTdG9yZSA9IF90aGlzLnN0b3JlO1xuICAgIGlmIChzdG9yZSkge1xuICAgICAgdmFyIG5leHRTdG9yZSA9IG1lcmdlKF90aGlzLnN0b3JlLCBzdG9yZSk7XG4gICAgICBfdGhpcy51cGRhdGVTdG9yZShuZXh0U3RvcmUpO1xuICAgIH1cbiAgICBfdGhpcy5ub3RpZnlPYnNlcnZlcnMocHJldlN0b3JlLCBudWxsLCB7XG4gICAgICB0eXBlOiAndmFsdWVVcGRhdGUnLFxuICAgICAgc291cmNlOiAnZXh0ZXJuYWwnXG4gICAgfSk7XG4gICAgX3RoaXMubm90aWZ5V2F0Y2goKTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNldEZpZWxkVmFsdWVcIiwgZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgX3RoaXMuc2V0RmllbGRzKFt7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIHdhcm5pbmdzOiBbXVxuICAgIH1dKTtcbiAgfSk7XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldERlcGVuZGVuY3lDaGlsZHJlbkZpZWxkc1wiLCBmdW5jdGlvbiAocm9vdE5hbWVQYXRoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gbmV3IFNldCgpO1xuICAgIHZhciBjaGlsZHJlbkZpZWxkcyA9IFtdO1xuICAgIHZhciBkZXBlbmRlbmNpZXMyZmllbGRzID0gbmV3IE5hbWVNYXAoKTtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIG1hcHNcbiAgICAgKiBDYW4gdXNlIGNhY2hlIHRvIHNhdmUgcGVyZiBpZiB1c2VyIHJlcG9ydCBwZXJmb3JtYW5jZSBpc3N1ZSB3aXRoIHRoaXNcbiAgICAgKi9cbiAgICBfdGhpcy5nZXRGaWVsZEVudGl0aWVzKCkuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSBmaWVsZC5wcm9wcy5kZXBlbmRlbmNpZXM7XG4gICAgICAoZGVwZW5kZW5jaWVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgICAgIHZhciBkZXBlbmRlbmN5TmFtZVBhdGggPSBnZXROYW1lUGF0aChkZXBlbmRlbmN5KTtcbiAgICAgICAgZGVwZW5kZW5jaWVzMmZpZWxkcy51cGRhdGUoZGVwZW5kZW5jeU5hbWVQYXRoLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGZpZWxkcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbmV3IFNldCgpO1xuICAgICAgICAgIGZpZWxkcy5hZGQoZmllbGQpO1xuICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdmFyIGZpbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIGZpbGxDaGlsZHJlbihuYW1lUGF0aCkge1xuICAgICAgdmFyIGZpZWxkcyA9IGRlcGVuZGVuY2llczJmaWVsZHMuZ2V0KG5hbWVQYXRoKSB8fCBuZXcgU2V0KCk7XG4gICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgaWYgKCFjaGlsZHJlbi5oYXMoZmllbGQpKSB7XG4gICAgICAgICAgY2hpbGRyZW4uYWRkKGZpZWxkKTtcbiAgICAgICAgICB2YXIgZmllbGROYW1lUGF0aCA9IGZpZWxkLmdldE5hbWVQYXRoKCk7XG4gICAgICAgICAgaWYgKGZpZWxkLmlzRmllbGREaXJ0eSgpICYmIGZpZWxkTmFtZVBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGlsZHJlbkZpZWxkcy5wdXNoKGZpZWxkTmFtZVBhdGgpO1xuICAgICAgICAgICAgZmlsbENoaWxkcmVuKGZpZWxkTmFtZVBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBmaWxsQ2hpbGRyZW4ocm9vdE5hbWVQYXRoKTtcbiAgICByZXR1cm4gY2hpbGRyZW5GaWVsZHM7XG4gIH0pO1xuICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0cmlnZ2VyT25GaWVsZHNDaGFuZ2VcIiwgZnVuY3Rpb24gKG5hbWVQYXRoTGlzdCwgZmlsZWRFcnJvcnMpIHtcbiAgICB2YXIgb25GaWVsZHNDaGFuZ2UgPSBfdGhpcy5jYWxsYmFja3Mub25GaWVsZHNDaGFuZ2U7XG4gICAgaWYgKG9uRmllbGRzQ2hhbmdlKSB7XG4gICAgICB2YXIgZmllbGRzID0gX3RoaXMuZ2V0RmllbGRzKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRmlsbCBlcnJvcnMgc2luY2UgYGZpZWxkc2AgbWF5IGJlIHJlcGxhY2VkIGJ5IGNvbnRyb2xsZWQgZmllbGRzXG4gICAgICAgKi9cbiAgICAgIGlmIChmaWxlZEVycm9ycykge1xuICAgICAgICB2YXIgY2FjaGUgPSBuZXcgTmFtZU1hcCgpO1xuICAgICAgICBmaWxlZEVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgICAgIHZhciBuYW1lID0gX3JlZjYubmFtZSxcbiAgICAgICAgICAgIGVycm9ycyA9IF9yZWY2LmVycm9ycztcbiAgICAgICAgICBjYWNoZS5zZXQobmFtZSwgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGZpZWxkLmVycm9ycyA9IGNhY2hlLmdldChmaWVsZC5uYW1lKSB8fCBmaWVsZC5lcnJvcnM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIGNoYW5nZWRGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNykge1xuICAgICAgICB2YXIgZmllbGROYW1lID0gX3JlZjcubmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zTmFtZVBhdGgobmFtZVBhdGhMaXN0LCBmaWVsZE5hbWUpO1xuICAgICAgfSk7XG4gICAgICBpZiAoY2hhbmdlZEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgb25GaWVsZHNDaGFuZ2UoY2hhbmdlZEZpZWxkcywgZmllbGRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gVmFsaWRhdGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInZhbGlkYXRlRmllbGRzXCIsIGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG4gICAgdmFyIG5hbWVMaXN0O1xuICAgIHZhciBvcHRpb25zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZzEpIHx8IHR5cGVvZiBhcmcxID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnMiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVMaXN0ID0gYXJnMTtcbiAgICAgIG9wdGlvbnMgPSBhcmcyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gYXJnMTtcbiAgICB9XG4gICAgdmFyIHByb3ZpZGVOYW1lTGlzdCA9ICEhbmFtZUxpc3Q7XG4gICAgdmFyIG5hbWVQYXRoTGlzdCA9IHByb3ZpZGVOYW1lTGlzdCA/IG5hbWVMaXN0Lm1hcChnZXROYW1lUGF0aCkgOiBbXTtcblxuICAgIC8vIENvbGxlY3QgcmVzdWx0IGluIHByb21pc2UgbGlzdFxuICAgIHZhciBwcm9taXNlTGlzdCA9IFtdO1xuXG4gICAgLy8gV2UgdGVtcCBzYXZlIHRoZSBwYXRoIHdoaWNoIG5lZWQgdHJpZ2dlciBmb3IgYG9uRmllbGRzQ2hhbmdlYFxuICAgIHZhciBUTVBfU1BMSVQgPSBTdHJpbmcoRGF0ZS5ub3coKSk7XG4gICAgdmFyIHZhbGlkYXRlTmFtZVBhdGhMaXN0ID0gbmV3IFNldCgpO1xuICAgIHZhciBfcmVmOCA9IG9wdGlvbnMgfHwge30sXG4gICAgICByZWN1cnNpdmUgPSBfcmVmOC5yZWN1cnNpdmUsXG4gICAgICBkaXJ0eSA9IF9yZWY4LmRpcnR5O1xuICAgIF90aGlzLmdldEZpZWxkRW50aXRpZXModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIC8vIEFkZCBmaWVsZCBpZiBub3QgcHJvdmlkZSBgbmFtZUxpc3RgXG4gICAgICBpZiAoIXByb3ZpZGVOYW1lTGlzdCkge1xuICAgICAgICBuYW1lUGF0aExpc3QucHVzaChmaWVsZC5nZXROYW1lUGF0aCgpKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB3aXRob3V0IHJ1bGVcbiAgICAgIGlmICghZmllbGQucHJvcHMucnVsZXMgfHwgIWZpZWxkLnByb3BzLnJ1bGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgaWYgb25seSB2YWxpZGF0ZSBkaXJ0eSBmaWVsZFxuICAgICAgaWYgKGRpcnR5ICYmICFmaWVsZC5pc0ZpZWxkRGlydHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgZmllbGROYW1lUGF0aCA9IGZpZWxkLmdldE5hbWVQYXRoKCk7XG4gICAgICB2YWxpZGF0ZU5hbWVQYXRoTGlzdC5hZGQoZmllbGROYW1lUGF0aC5qb2luKFRNUF9TUExJVCkpO1xuXG4gICAgICAvLyBBZGQgZmllbGQgdmFsaWRhdGUgcnVsZSBpbiB0byBwcm9taXNlIGxpc3RcbiAgICAgIGlmICghcHJvdmlkZU5hbWVMaXN0IHx8IGNvbnRhaW5zTmFtZVBhdGgobmFtZVBhdGhMaXN0LCBmaWVsZE5hbWVQYXRoLCByZWN1cnNpdmUpKSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gZmllbGQudmFsaWRhdGVSdWxlcyhfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICB2YWxpZGF0ZU1lc3NhZ2VzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRWYWxpZGF0ZU1lc3NhZ2VzKSwgX3RoaXMudmFsaWRhdGVNZXNzYWdlcylcbiAgICAgICAgfSwgb3B0aW9ucykpO1xuXG4gICAgICAgIC8vIFdyYXAgcHJvbWlzZSB3aXRoIGZpZWxkXG4gICAgICAgIHByb21pc2VMaXN0LnB1c2gocHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogZmllbGROYW1lUGF0aCxcbiAgICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgICB3YXJuaW5nczogW11cbiAgICAgICAgICB9O1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocnVsZUVycm9ycykge1xuICAgICAgICAgIHZhciBfcnVsZUVycm9ycyRmb3JFYWNoO1xuICAgICAgICAgIHZhciBtZXJnZWRFcnJvcnMgPSBbXTtcbiAgICAgICAgICB2YXIgbWVyZ2VkV2FybmluZ3MgPSBbXTtcbiAgICAgICAgICAoX3J1bGVFcnJvcnMkZm9yRWFjaCA9IHJ1bGVFcnJvcnMuZm9yRWFjaCkgPT09IG51bGwgfHwgX3J1bGVFcnJvcnMkZm9yRWFjaCA9PT0gdm9pZCAwIHx8IF9ydWxlRXJyb3JzJGZvckVhY2guY2FsbChydWxlRXJyb3JzLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgICAgICAgIHZhciB3YXJuaW5nT25seSA9IF9yZWY5LnJ1bGUud2FybmluZ09ubHksXG4gICAgICAgICAgICAgIGVycm9ycyA9IF9yZWY5LmVycm9ycztcbiAgICAgICAgICAgIGlmICh3YXJuaW5nT25seSkge1xuICAgICAgICAgICAgICBtZXJnZWRXYXJuaW5ncy5wdXNoLmFwcGx5KG1lcmdlZFdhcm5pbmdzLCBfdG9Db25zdW1hYmxlQXJyYXkoZXJyb3JzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXJnZWRFcnJvcnMucHVzaC5hcHBseShtZXJnZWRFcnJvcnMsIF90b0NvbnN1bWFibGVBcnJheShlcnJvcnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobWVyZ2VkRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgICAgICAgICAgICAgbmFtZTogZmllbGROYW1lUGF0aCxcbiAgICAgICAgICAgICAgZXJyb3JzOiBtZXJnZWRFcnJvcnMsXG4gICAgICAgICAgICAgIHdhcm5pbmdzOiBtZXJnZWRXYXJuaW5nc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBmaWVsZE5hbWVQYXRoLFxuICAgICAgICAgICAgZXJyb3JzOiBtZXJnZWRFcnJvcnMsXG4gICAgICAgICAgICB3YXJuaW5nczogbWVyZ2VkV2FybmluZ3NcbiAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIHN1bW1hcnlQcm9taXNlID0gYWxsUHJvbWlzZUZpbmlzaChwcm9taXNlTGlzdCk7XG4gICAgX3RoaXMubGFzdFZhbGlkYXRlUHJvbWlzZSA9IHN1bW1hcnlQcm9taXNlO1xuXG4gICAgLy8gTm90aWZ5IGZpZWxkcyB3aXRoIHJ1bGUgdGhhdCB2YWxpZGF0ZSBoYXMgZmluaXNoZWQgYW5kIG5lZWQgdXBkYXRlXG4gICAgc3VtbWFyeVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgIHZhciByZXN1bHROYW1lUGF0aExpc3QgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZjEwLm5hbWU7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5ub3RpZnlPYnNlcnZlcnMoX3RoaXMuc3RvcmUsIHJlc3VsdE5hbWVQYXRoTGlzdCwge1xuICAgICAgICB0eXBlOiAndmFsaWRhdGVGaW5pc2gnXG4gICAgICB9KTtcbiAgICAgIF90aGlzLnRyaWdnZXJPbkZpZWxkc0NoYW5nZShyZXN1bHROYW1lUGF0aExpc3QsIHJlc3VsdHMpO1xuICAgIH0pO1xuICAgIHZhciByZXR1cm5Qcm9taXNlID0gc3VtbWFyeVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMubGFzdFZhbGlkYXRlUHJvbWlzZSA9PT0gc3VtbWFyeVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShfdGhpcy5nZXRGaWVsZHNWYWx1ZShuYW1lUGF0aExpc3QpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChbXSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgIHZhciBlcnJvckxpc3QgPSByZXN1bHRzLmZpbHRlcihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmVycm9ycy5sZW5ndGg7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7XG4gICAgICAgIHZhbHVlczogX3RoaXMuZ2V0RmllbGRzVmFsdWUobmFtZVBhdGhMaXN0KSxcbiAgICAgICAgZXJyb3JGaWVsZHM6IGVycm9yTGlzdCxcbiAgICAgICAgb3V0T2ZEYXRlOiBfdGhpcy5sYXN0VmFsaWRhdGVQcm9taXNlICE9PSBzdW1tYXJ5UHJvbWlzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBEbyBub3QgdGhyb3cgaW4gY29uc29sZVxuICAgIHJldHVyblByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBlO1xuICAgIH0pO1xuXG4gICAgLy8gYHZhbGlkYXRpbmdgIGNoYW5nZWQuIFRyaWdnZXIgYG9uRmllbGRzQ2hhbmdlYFxuICAgIHZhciB0cmlnZ2VyTmFtZVBhdGhMaXN0ID0gbmFtZVBhdGhMaXN0LmZpbHRlcihmdW5jdGlvbiAobmFtZVBhdGgpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQYXRoTGlzdC5oYXMobmFtZVBhdGguam9pbihUTVBfU1BMSVQpKTtcbiAgICB9KTtcbiAgICBfdGhpcy50cmlnZ2VyT25GaWVsZHNDaGFuZ2UodHJpZ2dlck5hbWVQYXRoTGlzdCk7XG4gICAgcmV0dXJuIHJldHVyblByb21pc2U7XG4gIH0pO1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFN1Ym1pdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN1Ym1pdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgX3RoaXMud2FybmluZ1VuaG9va2VkKCk7XG4gICAgX3RoaXMudmFsaWRhdGVGaWVsZHMoKS50aGVuKGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgIHZhciBvbkZpbmlzaCA9IF90aGlzLmNhbGxiYWNrcy5vbkZpbmlzaDtcbiAgICAgIGlmIChvbkZpbmlzaCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG9uRmluaXNoKHZhbHVlcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFNob3VsZCBwcmludCBlcnJvciBpZiB1c2VyIGBvbkZpbmlzaGAgY2FsbGJhY2sgZmFpbGVkXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBvbkZpbmlzaEZhaWxlZCA9IF90aGlzLmNhbGxiYWNrcy5vbkZpbmlzaEZhaWxlZDtcbiAgICAgIGlmIChvbkZpbmlzaEZhaWxlZCkge1xuICAgICAgICBvbkZpbmlzaEZhaWxlZChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHRoaXMuZm9yY2VSb290VXBkYXRlID0gZm9yY2VSb290VXBkYXRlO1xufSk7XG5mdW5jdGlvbiB1c2VGb3JtKGZvcm0pIHtcbiAgdmFyIGZvcm1SZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBfUmVhY3QkdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZVN0YXRlLCAyKSxcbiAgICBmb3JjZVVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIGlmICghZm9ybVJlZi5jdXJyZW50KSB7XG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIGZvcm1SZWYuY3VycmVudCA9IGZvcm07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBGb3JtU3RvcmUgaWYgbm90IHByb3ZpZGVkXG4gICAgICB2YXIgZm9yY2VSZVJlbmRlciA9IGZ1bmN0aW9uIGZvcmNlUmVSZW5kZXIoKSB7XG4gICAgICAgIGZvcmNlVXBkYXRlKHt9KTtcbiAgICAgIH07XG4gICAgICB2YXIgZm9ybVN0b3JlID0gbmV3IEZvcm1TdG9yZShmb3JjZVJlUmVuZGVyKTtcbiAgICAgIGZvcm1SZWYuY3VycmVudCA9IGZvcm1TdG9yZS5nZXRGb3JtKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbZm9ybVJlZi5jdXJyZW50XTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgd2FybmluZyBmcm9tIFwicmMtdXRpbC9lcy93YXJuaW5nXCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRmllbGRDb250ZXh0LCB7IEhPT0tfTUFSSyB9IGZyb20gXCIuL0ZpZWxkQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNGb3JtSW5zdGFuY2UgfSBmcm9tIFwiLi91dGlscy90eXBlVXRpbFwiO1xuaW1wb3J0IHsgZ2V0TmFtZVBhdGgsIGdldFZhbHVlIH0gZnJvbSBcIi4vdXRpbHMvdmFsdWVVdGlsXCI7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCk7XG4gIH1cbn1cbnZhciB1c2VXYXRjaFdhcm5pbmcgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZnVuY3Rpb24gKG5hbWVQYXRoKSB7XG4gIHZhciBmdWxseVN0ciA9IG5hbWVQYXRoLmpvaW4oJ19fUkNfRklFTERfRk9STV9TUExJVF9fJyk7XG4gIHZhciBuYW1lU3RyUmVmID0gdXNlUmVmKGZ1bGx5U3RyKTtcbiAgd2FybmluZyhuYW1lU3RyUmVmLmN1cnJlbnQgPT09IGZ1bGx5U3RyLCAnYHVzZVdhdGNoYCBpcyBub3Qgc3VwcG9ydCBkeW5hbWljIGBuYW1lUGF0aGAuIFBsZWFzZSBwcm92aWRlIHN0YXRpYyBpbnN0ZWFkLicpO1xufSA6IGZ1bmN0aW9uICgpIHt9O1xuXG4vLyAtLS0tLS0tIHNlbGVjdG9yIHR5cGUgLS0tLS0tLVxuXG4vLyAtLS0tLS0tIHNlbGVjdG9yIHR5cGUgZW5kIC0tLS0tLS1cblxuZnVuY3Rpb24gdXNlV2F0Y2goKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgdmFyIGRlcGVuZGVuY2llcyA9IGFyZ3NbMF0sXG4gICAgX2FyZ3MkID0gYXJnc1sxXSxcbiAgICBfZm9ybSA9IF9hcmdzJCA9PT0gdm9pZCAwID8ge30gOiBfYXJncyQ7XG4gIHZhciBvcHRpb25zID0gaXNGb3JtSW5zdGFuY2UoX2Zvcm0pID8ge1xuICAgIGZvcm06IF9mb3JtXG4gIH0gOiBfZm9ybTtcbiAgdmFyIGZvcm0gPSBvcHRpb25zLmZvcm07XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSgpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHZhbHVlID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRWYWx1ZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciB2YWx1ZVN0ciA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdHJpbmdpZnkodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcbiAgdmFyIHZhbHVlU3RyUmVmID0gdXNlUmVmKHZhbHVlU3RyKTtcbiAgdmFsdWVTdHJSZWYuY3VycmVudCA9IHZhbHVlU3RyO1xuICB2YXIgZmllbGRDb250ZXh0ID0gdXNlQ29udGV4dChGaWVsZENvbnRleHQpO1xuICB2YXIgZm9ybUluc3RhbmNlID0gZm9ybSB8fCBmaWVsZENvbnRleHQ7XG4gIHZhciBpc1ZhbGlkRm9ybSA9IGZvcm1JbnN0YW5jZSAmJiBmb3JtSW5zdGFuY2UuX2luaXQ7XG5cbiAgLy8gV2FybmluZyBpZiBub3QgZXhpc3QgZm9ybSBpbnN0YW5jZVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm5pbmcoYXJncy5sZW5ndGggPT09IDIgPyBmb3JtID8gaXNWYWxpZEZvcm0gOiB0cnVlIDogaXNWYWxpZEZvcm0sICd1c2VXYXRjaCByZXF1aXJlcyBhIGZvcm0gaW5zdGFuY2Ugc2luY2UgaXQgY2FuIG5vdCBhdXRvIGRldGVjdCBmcm9tIGNvbnRleHQuJyk7XG4gIH1cbiAgdmFyIG5hbWVQYXRoID0gZ2V0TmFtZVBhdGgoZGVwZW5kZW5jaWVzKTtcbiAgdmFyIG5hbWVQYXRoUmVmID0gdXNlUmVmKG5hbWVQYXRoKTtcbiAgbmFtZVBhdGhSZWYuY3VycmVudCA9IG5hbWVQYXRoO1xuICB1c2VXYXRjaFdhcm5pbmcobmFtZVBhdGgpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIFNraXAgaWYgbm90IGV4aXN0IGZvcm0gaW5zdGFuY2VcbiAgICBpZiAoIWlzVmFsaWRGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBnZXRGaWVsZHNWYWx1ZSA9IGZvcm1JbnN0YW5jZS5nZXRGaWVsZHNWYWx1ZSxcbiAgICAgIGdldEludGVybmFsSG9va3MgPSBmb3JtSW5zdGFuY2UuZ2V0SW50ZXJuYWxIb29rcztcbiAgICB2YXIgX2dldEludGVybmFsSG9va3MgPSBnZXRJbnRlcm5hbEhvb2tzKEhPT0tfTUFSSyksXG4gICAgICByZWdpc3RlcldhdGNoID0gX2dldEludGVybmFsSG9va3MucmVnaXN0ZXJXYXRjaDtcbiAgICB2YXIgZ2V0V2F0Y2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFdhdGNoVmFsdWUodmFsdWVzLCBhbGxWYWx1ZXMpIHtcbiAgICAgIHZhciB3YXRjaFZhbHVlID0gb3B0aW9ucy5wcmVzZXJ2ZSA/IGFsbFZhbHVlcyA6IHZhbHVlcztcbiAgICAgIHJldHVybiB0eXBlb2YgZGVwZW5kZW5jaWVzID09PSAnZnVuY3Rpb24nID8gZGVwZW5kZW5jaWVzKHdhdGNoVmFsdWUpIDogZ2V0VmFsdWUod2F0Y2hWYWx1ZSwgbmFtZVBhdGhSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgICB2YXIgY2FuY2VsUmVnaXN0ZXIgPSByZWdpc3RlcldhdGNoKGZ1bmN0aW9uICh2YWx1ZXMsIGFsbFZhbHVlcykge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gZ2V0V2F0Y2hWYWx1ZSh2YWx1ZXMsIGFsbFZhbHVlcyk7XG4gICAgICB2YXIgbmV4dFZhbHVlU3RyID0gc3RyaW5naWZ5KG5ld1ZhbHVlKTtcblxuICAgICAgLy8gQ29tcGFyZSBzdHJpbmdpZnkgaW4gY2FzZSBpdCdzIG5lc3Qgb2JqZWN0XG4gICAgICBpZiAodmFsdWVTdHJSZWYuY3VycmVudCAhPT0gbmV4dFZhbHVlU3RyKSB7XG4gICAgICAgIHZhbHVlU3RyUmVmLmN1cnJlbnQgPSBuZXh0VmFsdWVTdHI7XG4gICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRPRE86IFdlIGNhbiBpbXByb3ZlIHRoaXMgcGVyZiBpbiBmdXR1cmVcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gZ2V0V2F0Y2hWYWx1ZShnZXRGaWVsZHNWYWx1ZSgpLCBnZXRGaWVsZHNWYWx1ZSh0cnVlKSk7XG5cbiAgICAvLyBSZWFjdCAxOCBoYXMgdGhlIGJ1ZyB0aGF0IHdpbGwgcXVldWUgdXBkYXRlIHR3aWNlIGV2ZW4gdGhlIHZhbHVlIGlzIG5vdCBjaGFuZ2VkXG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzI3MjEzXG4gICAgaWYgKHZhbHVlICE9PSBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHNldFZhbHVlKGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBjYW5jZWxSZWdpc3RlcjtcbiAgfSxcbiAgLy8gV2UgZG8gbm90IG5lZWQgcmUtcmVnaXN0ZXIgc2luY2UgbmFtZVBhdGggY29udGVudCBpcyB0aGUgc2FtZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtpc1ZhbGlkRm9ybV0pO1xuICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VXYXRjaDsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG52YXIgU1BMSVQgPSAnX19AZmllbGRfc3BsaXRfXyc7XG5cbi8qKlxuICogQ29udmVydCBuYW1lIHBhdGggaW50byBzdHJpbmcgdG8gZmFzdCB0aGUgZmV0Y2ggc3BlZWQgb2YgTWFwLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUobmFtZVBhdGgpIHtcbiAgcmV0dXJuIG5hbWVQYXRoLm1hcChmdW5jdGlvbiAoY2VsbCkge1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChfdHlwZW9mKGNlbGwpLCBcIjpcIikuY29uY2F0KGNlbGwpO1xuICB9KVxuICAvLyBNYWdpYyBzcGxpdFxuICAuam9pbihTUExJVCk7XG59XG5cbi8qKlxuICogTmFtZU1hcCBsaWtlIGEgYE1hcGAgYnV0IGFjY2VwdHMgYHN0cmluZ1tdYCBhcyBrZXkuXG4gKi9cbnZhciBOYW1lTWFwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTmFtZU1hcCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmFtZU1hcCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwia3ZzXCIsIG5ldyBNYXAoKSk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKE5hbWVNYXAsIFt7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5rdnMuc2V0KG5vcm1hbGl6ZShrZXkpLCB2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5rdnMuZ2V0KG5vcm1hbGl6ZShrZXkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZShrZXksIHVwZGF0ZXIpIHtcbiAgICAgIHZhciBvcmlnaW4gPSB0aGlzLmdldChrZXkpO1xuICAgICAgdmFyIG5leHQgPSB1cGRhdGVyKG9yaWdpbik7XG4gICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgdGhpcy5kZWxldGUoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0KGtleSwgbmV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgdGhpcy5rdnMuZGVsZXRlKG5vcm1hbGl6ZShrZXkpKTtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSB3ZSBvbmx5IHVzZSB0aGlzIGluIHRlc3QsIGxldCBzaW1wbHkgcmVhbGl6ZSB0aGlzXG4gIH0sIHtcbiAgICBrZXk6IFwibWFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIF90b0NvbnN1bWFibGVBcnJheSh0aGlzLmt2cy5lbnRyaWVzKCkpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgICAgICBrZXkgPSBfcmVmMlswXSxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuICAgICAgICB2YXIgY2VsbHMgPSBrZXkuc3BsaXQoU1BMSVQpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soe1xuICAgICAgICAgIGtleTogY2VsbHMubWFwKGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgICAgICB2YXIgX2NlbGwkbWF0Y2ggPSBjZWxsLm1hdGNoKC9eKFteOl0qKTooLiopJC8pLFxuICAgICAgICAgICAgICBfY2VsbCRtYXRjaDIgPSBfc2xpY2VkVG9BcnJheShfY2VsbCRtYXRjaCwgMyksXG4gICAgICAgICAgICAgIHR5cGUgPSBfY2VsbCRtYXRjaDJbMV0sXG4gICAgICAgICAgICAgIHVuaXQgPSBfY2VsbCRtYXRjaDJbMl07XG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ251bWJlcicgPyBOdW1iZXIodW5pdCkgOiB1bml0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgdmFyIGpzb24gPSB7fTtcbiAgICAgIHRoaXMubWFwKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIga2V5ID0gX3JlZjMua2V5LFxuICAgICAgICAgIHZhbHVlID0gX3JlZjMudmFsdWU7XG4gICAgICAgIGpzb25ba2V5LmpvaW4oJy4nKV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTmFtZU1hcDtcbn0oKTtcbmV4cG9ydCBkZWZhdWx0IE5hbWVNYXA7IiwiZXhwb3J0IGZ1bmN0aW9uIGFsbFByb21pc2VGaW5pc2gocHJvbWlzZUxpc3QpIHtcbiAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gIHZhciBjb3VudCA9IHByb21pc2VMaXN0Lmxlbmd0aDtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgaWYgKCFwcm9taXNlTGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHByb21pc2VMaXN0LmZvckVhY2goZnVuY3Rpb24gKHByb21pc2UsIGluZGV4KSB7XG4gICAgICBwcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgY291bnQgLT0gMTtcbiAgICAgICAgcmVzdWx0c1tpbmRleF0gPSByZXN1bHQ7XG4gICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59IiwidmFyIHR5cGVUZW1wbGF0ZSA9IFwiJyR7bmFtZX0nIGlzIG5vdCBhIHZhbGlkICR7dHlwZX1cIjtcbmV4cG9ydCB2YXIgZGVmYXVsdFZhbGlkYXRlTWVzc2FnZXMgPSB7XG4gIGRlZmF1bHQ6IFwiVmFsaWRhdGlvbiBlcnJvciBvbiBmaWVsZCAnJHtuYW1lfSdcIixcbiAgcmVxdWlyZWQ6IFwiJyR7bmFtZX0nIGlzIHJlcXVpcmVkXCIsXG4gIGVudW06IFwiJyR7bmFtZX0nIG11c3QgYmUgb25lIG9mIFske2VudW19XVwiLFxuICB3aGl0ZXNwYWNlOiBcIicke25hbWV9JyBjYW5ub3QgYmUgZW1wdHlcIixcbiAgZGF0ZToge1xuICAgIGZvcm1hdDogXCInJHtuYW1lfScgaXMgaW52YWxpZCBmb3IgZm9ybWF0IGRhdGVcIixcbiAgICBwYXJzZTogXCInJHtuYW1lfScgY291bGQgbm90IGJlIHBhcnNlZCBhcyBkYXRlXCIsXG4gICAgaW52YWxpZDogXCInJHtuYW1lfScgaXMgaW52YWxpZCBkYXRlXCJcbiAgfSxcbiAgdHlwZXM6IHtcbiAgICBzdHJpbmc6IHR5cGVUZW1wbGF0ZSxcbiAgICBtZXRob2Q6IHR5cGVUZW1wbGF0ZSxcbiAgICBhcnJheTogdHlwZVRlbXBsYXRlLFxuICAgIG9iamVjdDogdHlwZVRlbXBsYXRlLFxuICAgIG51bWJlcjogdHlwZVRlbXBsYXRlLFxuICAgIGRhdGU6IHR5cGVUZW1wbGF0ZSxcbiAgICBib29sZWFuOiB0eXBlVGVtcGxhdGUsXG4gICAgaW50ZWdlcjogdHlwZVRlbXBsYXRlLFxuICAgIGZsb2F0OiB0eXBlVGVtcGxhdGUsXG4gICAgcmVnZXhwOiB0eXBlVGVtcGxhdGUsXG4gICAgZW1haWw6IHR5cGVUZW1wbGF0ZSxcbiAgICB1cmw6IHR5cGVUZW1wbGF0ZSxcbiAgICBoZXg6IHR5cGVUZW1wbGF0ZVxuICB9LFxuICBzdHJpbmc6IHtcbiAgICBsZW46IFwiJyR7bmFtZX0nIG11c3QgYmUgZXhhY3RseSAke2xlbn0gY2hhcmFjdGVyc1wiLFxuICAgIG1pbjogXCInJHtuYW1lfScgbXVzdCBiZSBhdCBsZWFzdCAke21pbn0gY2hhcmFjdGVyc1wiLFxuICAgIG1heDogXCInJHtuYW1lfScgY2Fubm90IGJlIGxvbmdlciB0aGFuICR7bWF4fSBjaGFyYWN0ZXJzXCIsXG4gICAgcmFuZ2U6IFwiJyR7bmFtZX0nIG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fSBjaGFyYWN0ZXJzXCJcbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgbGVuOiBcIicke25hbWV9JyBtdXN0IGVxdWFsICR7bGVufVwiLFxuICAgIG1pbjogXCInJHtuYW1lfScgY2Fubm90IGJlIGxlc3MgdGhhbiAke21pbn1cIixcbiAgICBtYXg6IFwiJyR7bmFtZX0nIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gJHttYXh9XCIsXG4gICAgcmFuZ2U6IFwiJyR7bmFtZX0nIG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fVwiXG4gIH0sXG4gIGFycmF5OiB7XG4gICAgbGVuOiBcIicke25hbWV9JyBtdXN0IGJlIGV4YWN0bHkgJHtsZW59IGluIGxlbmd0aFwiLFxuICAgIG1pbjogXCInJHtuYW1lfScgY2Fubm90IGJlIGxlc3MgdGhhbiAke21pbn0gaW4gbGVuZ3RoXCIsXG4gICAgbWF4OiBcIicke25hbWV9JyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICR7bWF4fSBpbiBsZW5ndGhcIixcbiAgICByYW5nZTogXCInJHtuYW1lfScgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9IGluIGxlbmd0aFwiXG4gIH0sXG4gIHBhdHRlcm46IHtcbiAgICBtaXNtYXRjaDogXCInJHtuYW1lfScgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiAke3BhdHRlcm59XCJcbiAgfVxufTsiLCJleHBvcnQgZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtSW5zdGFuY2UoZm9ybSkge1xuICByZXR1cm4gZm9ybSAmJiAhIWZvcm0uX2luaXQ7XG59IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3JlZ2VuZXJhdG9yUnVudGltZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcmVnZW5lcmF0b3JSdW50aW1lXCI7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yXCI7XG5pbXBvcnQgUmF3QXN5bmNWYWxpZGF0b3IgZnJvbSAnQHJjLWNvbXBvbmVudC9hc3luYy12YWxpZGF0b3InO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSBcInJjLXV0aWwvZXMvd2FybmluZ1wiO1xuaW1wb3J0IHsgZGVmYXVsdFZhbGlkYXRlTWVzc2FnZXMgfSBmcm9tIFwiLi9tZXNzYWdlc1wiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwicmMtdXRpbC9lcy91dGlscy9zZXRcIjtcblxuLy8gUmVtb3ZlIGluY29ycmVjdCBvcmlnaW5hbCB0cyBkZWZpbmVcbnZhciBBc3luY1ZhbGlkYXRvciA9IFJhd0FzeW5jVmFsaWRhdG9yO1xuXG4vKipcbiAqIFJlcGxhY2Ugd2l0aCB0ZW1wbGF0ZS5cbiAqICAgYEknbSAke25hbWV9YCArIHsgbmFtZTogJ2JhbWJvbycgfSA9IEknbSBiYW1ib29cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZU1lc3NhZ2UodGVtcGxhdGUsIGt2KSB7XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXFxcP1xcJFxce1xcdytcXH0vZywgZnVuY3Rpb24gKHN0cikge1xuICAgIGlmIChzdHIuc3RhcnRzV2l0aCgnXFxcXCcpKSB7XG4gICAgICByZXR1cm4gc3RyLnNsaWNlKDEpO1xuICAgIH1cbiAgICB2YXIga2V5ID0gc3RyLnNsaWNlKDIsIC0xKTtcbiAgICByZXR1cm4ga3Zba2V5XTtcbiAgfSk7XG59XG52YXIgQ09ERV9MT0dJQ19FUlJPUiA9ICdDT0RFX0xPR0lDX0VSUk9SJztcbmZ1bmN0aW9uIHZhbGlkYXRlUnVsZShfeCwgX3gyLCBfeDMsIF94NCwgX3g1KSB7XG4gIHJldHVybiBfdmFsaWRhdGVSdWxlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFdlIHVzZSBgYXN5bmMtdmFsaWRhdG9yYCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUuXG4gKiBCdXQgb25seSBjaGVjayBvbmUgdmFsdWUgaW4gYSB0aW1lIHRvIGF2b2lkIG5hbWVQYXRoIHZhbGlkYXRlIGlzc3VlLlxuICovXG5mdW5jdGlvbiBfdmFsaWRhdGVSdWxlKCkge1xuICBfdmFsaWRhdGVSdWxlID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMihuYW1lLCB2YWx1ZSwgcnVsZSwgb3B0aW9ucywgbWVzc2FnZVZhcmlhYmxlcykge1xuICAgIHZhciBjbG9uZVJ1bGUsIG9yaWdpblZhbGlkYXRvciwgc3ViUnVsZUZpZWxkLCB2YWxpZGF0b3IsIG1lc3NhZ2VzLCByZXN1bHQsIHN1YlJlc3VsdHMsIGt2LCBmaWxsVmFyaWFibGVSZXN1bHQ7XG4gICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNsb25lUnVsZSA9IF9vYmplY3RTcHJlYWQoe30sIHJ1bGUpOyAvLyBCdWcgb2YgYGFzeW5jLXZhbGlkYXRvcmBcbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtY29tcG9uZW50L2ZpZWxkLWZvcm0vaXNzdWVzLzMxNlxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1jb21wb25lbnQvZmllbGQtZm9ybS9pc3N1ZXMvMzEzXG4gICAgICAgICAgZGVsZXRlIGNsb25lUnVsZS5ydWxlSW5kZXg7XG5cbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduL2lzc3Vlcy80MDQ5NyNpc3N1ZWNvbW1lbnQtMTQyMjI4MjM3OFxuICAgICAgICAgIEFzeW5jVmFsaWRhdG9yLndhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGNsb25lUnVsZS52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIG9yaWdpblZhbGlkYXRvciA9IGNsb25lUnVsZS52YWxpZGF0b3I7XG4gICAgICAgICAgICBjbG9uZVJ1bGUudmFsaWRhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5WYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChDT0RFX0xPR0lDX0VSUk9SKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBXZSBzaG91bGQgc3BlY2lhbCBoYW5kbGUgYXJyYXkgdmFsaWRhdGVcbiAgICAgICAgICBzdWJSdWxlRmllbGQgPSBudWxsO1xuICAgICAgICAgIGlmIChjbG9uZVJ1bGUgJiYgY2xvbmVSdWxlLnR5cGUgPT09ICdhcnJheScgJiYgY2xvbmVSdWxlLmRlZmF1bHRGaWVsZCkge1xuICAgICAgICAgICAgc3ViUnVsZUZpZWxkID0gY2xvbmVSdWxlLmRlZmF1bHRGaWVsZDtcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVJ1bGUuZGVmYXVsdEZpZWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGF0b3IgPSBuZXcgQXN5bmNWYWxpZGF0b3IoX2RlZmluZVByb3BlcnR5KHt9LCBuYW1lLCBbY2xvbmVSdWxlXSkpO1xuICAgICAgICAgIG1lc3NhZ2VzID0gbWVyZ2UoZGVmYXVsdFZhbGlkYXRlTWVzc2FnZXMsIG9wdGlvbnMudmFsaWRhdGVNZXNzYWdlcyk7XG4gICAgICAgICAgdmFsaWRhdG9yLm1lc3NhZ2VzKG1lc3NhZ2VzKTtcbiAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICBfY29udGV4dDIucHJldiA9IDEwO1xuICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTM7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWxpZGF0b3IudmFsaWRhdGUoX2RlZmluZVByb3BlcnR5KHt9LCBuYW1lLCB2YWx1ZSksIF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMpKSk7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBfY29udGV4dDIucHJldiA9IDE1O1xuICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9jb250ZXh0MltcImNhdGNoXCJdKDEwKTtcbiAgICAgICAgICBpZiAoX2NvbnRleHQyLnQwLmVycm9ycykge1xuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnRleHQyLnQwLmVycm9ycy5tYXAoZnVuY3Rpb24gKF9yZWY0LCBpbmRleCkge1xuICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IF9yZWY0Lm1lc3NhZ2U7XG4gICAgICAgICAgICAgIHZhciBtZXJnZWRNZXNzYWdlID0gbWVzc2FnZSA9PT0gQ09ERV9MT0dJQ19FUlJPUiA/IG1lc3NhZ2VzLmRlZmF1bHQgOiBtZXNzYWdlO1xuICAgICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KG1lcmdlZE1lc3NhZ2UpID9cbiAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAvLyBXcmFwIFJlYWN0Tm9kZSB3aXRoIGBrZXlgXG4gICAgICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChtZXJnZWRNZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImVycm9yX1wiLmNvbmNhdChpbmRleClcbiAgICAgICAgICAgICAgfSkgOiBtZXJnZWRNZXNzYWdlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIGlmICghKCFyZXN1bHQubGVuZ3RoICYmIHN1YlJ1bGVGaWVsZCkpIHtcbiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyMTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodmFsdWUubWFwKGZ1bmN0aW9uIChzdWJWYWx1ZSwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlUnVsZShcIlwiLmNvbmNhdChuYW1lLCBcIi5cIikuY29uY2F0KGkpLCBzdWJWYWx1ZSwgc3ViUnVsZUZpZWxkLCBvcHRpb25zLCBtZXNzYWdlVmFyaWFibGVzKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgc3ViUmVzdWx0cyA9IF9jb250ZXh0Mi5zZW50O1xuICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHN1YlJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBlcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZXYpLCBfdG9Db25zdW1hYmxlQXJyYXkoZXJyb3JzKSk7XG4gICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAvLyBSZXBsYWNlIG1lc3NhZ2Ugd2l0aCB2YXJpYWJsZXNcbiAgICAgICAgICBrdiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcnVsZSksIHt9LCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgZW51bTogKHJ1bGUuZW51bSB8fCBbXSkuam9pbignLCAnKVxuICAgICAgICAgIH0sIG1lc3NhZ2VWYXJpYWJsZXMpO1xuICAgICAgICAgIGZpbGxWYXJpYWJsZVJlc3VsdCA9IHJlc3VsdC5tYXAoZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZU1lc3NhZ2UoZXJyb3IsIGt2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCBmaWxsVmFyaWFibGVSZXN1bHQpO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICB9XG4gICAgfSwgX2NhbGxlZTIsIG51bGwsIFtbMTAsIDE1XV0pO1xuICB9KSk7XG4gIHJldHVybiBfdmFsaWRhdGVSdWxlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSdWxlcyhuYW1lUGF0aCwgdmFsdWUsIHJ1bGVzLCBvcHRpb25zLCB2YWxpZGF0ZUZpcnN0LCBtZXNzYWdlVmFyaWFibGVzKSB7XG4gIHZhciBuYW1lID0gbmFtZVBhdGguam9pbignLicpO1xuXG4gIC8vIEZpbGwgcnVsZSB3aXRoIGNvbnRleHRcbiAgdmFyIGZpbGxlZFJ1bGVzID0gcnVsZXMubWFwKGZ1bmN0aW9uIChjdXJyZW50UnVsZSwgcnVsZUluZGV4KSB7XG4gICAgdmFyIG9yaWdpblZhbGlkYXRvckZ1bmMgPSBjdXJyZW50UnVsZS52YWxpZGF0b3I7XG4gICAgdmFyIGNsb25lUnVsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudFJ1bGUpLCB7fSwge1xuICAgICAgcnVsZUluZGV4OiBydWxlSW5kZXhcbiAgICB9KTtcblxuICAgIC8vIFJlcGxhY2UgdmFsaWRhdG9yIGlmIG5lZWRlZFxuICAgIGlmIChvcmlnaW5WYWxpZGF0b3JGdW5jKSB7XG4gICAgICBjbG9uZVJ1bGUudmFsaWRhdG9yID0gZnVuY3Rpb24gKHJ1bGUsIHZhbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGhhc1Byb21pc2UgPSBmYWxzZTtcblxuICAgICAgICAvLyBXcmFwIGNhbGxiYWNrIG9ubHkgYWNjZXB0IHdoZW4gcHJvbWlzZSBub3QgcHJvdmlkZWRcbiAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IGZ1bmN0aW9uIHdyYXBwZWRDYWxsYmFjaygpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdhaXQgYSB0aWNrIHRvIG1ha2Ugc3VyZSByZXR1cm4gdHlwZSBpcyBhIHByb21pc2VcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoIWhhc1Byb21pc2UsICdZb3VyIHZhbGlkYXRvciBmdW5jdGlvbiBoYXMgYWxyZWFkeSByZXR1cm4gYSBwcm9taXNlLiBgY2FsbGJhY2tgIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgICAgICAgIGlmICghaGFzUHJvbWlzZSkge1xuICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEdldCBwcm9taXNlXG4gICAgICAgIHZhciBwcm9taXNlID0gb3JpZ2luVmFsaWRhdG9yRnVuYyhydWxlLCB2YWwsIHdyYXBwZWRDYWxsYmFjayk7XG4gICAgICAgIGhhc1Byb21pc2UgPSBwcm9taXNlICYmIHR5cGVvZiBwcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbic7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIDEuIFVzZSBwcm9taXNlIGFzIHRoZSBmaXJzdCBwcmlvcml0eS5cbiAgICAgICAgICogMi4gSWYgcHJvbWlzZSBub3QgZXhpc3QsIHVzZSBjYWxsYmFjayB3aXRoIHdhcm5pbmcgaW5zdGVhZFxuICAgICAgICAgKi9cbiAgICAgICAgd2FybmluZyhoYXNQcm9taXNlLCAnYGNhbGxiYWNrYCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgcmV0dXJuIGEgcHJvbWlzZSBpbnN0ZWFkLicpO1xuICAgICAgICBpZiAoaGFzUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciB8fCAnICcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVSdWxlO1xuICB9KS5zb3J0KGZ1bmN0aW9uIChfcmVmLCBfcmVmMikge1xuICAgIHZhciB3MSA9IF9yZWYud2FybmluZ09ubHksXG4gICAgICBpMSA9IF9yZWYucnVsZUluZGV4O1xuICAgIHZhciB3MiA9IF9yZWYyLndhcm5pbmdPbmx5LFxuICAgICAgaTIgPSBfcmVmMi5ydWxlSW5kZXg7XG4gICAgaWYgKCEhdzEgPT09ICEhdzIpIHtcbiAgICAgIC8vIExldCBrZWVwIG9yaWdpbiBvcmRlclxuICAgICAgcmV0dXJuIGkxIC0gaTI7XG4gICAgfVxuICAgIGlmICh3MSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfSk7XG5cbiAgLy8gRG8gdmFsaWRhdGUgcnVsZXNcbiAgdmFyIHN1bW1hcnlQcm9taXNlO1xuICBpZiAodmFsaWRhdGVGaXJzdCA9PT0gdHJ1ZSkge1xuICAgIC8vID4+Pj4+IFZhbGlkYXRlIGJ5IHNlcmlhbGl6YXRpb25cbiAgICBzdW1tYXJ5UHJvbWlzZSA9IG5ldyBQcm9taXNlKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9yZWYzID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgaSwgcnVsZSwgZXJyb3JzO1xuICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgaWYgKCEoaSA8IGZpbGxlZFJ1bGVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcnVsZSA9IGZpbGxlZFJ1bGVzW2ldO1xuICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlUnVsZShuYW1lLCB2YWx1ZSwgcnVsZSwgb3B0aW9ucywgbWVzc2FnZVZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGVycm9ycyA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgIGlmICghZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlamVjdChbe1xuICAgICAgICAgICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGVcbiAgICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cblxuICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBfY2FsbGVlKTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2LCBfeDcpIHtcbiAgICAgICAgcmV0dXJuIF9yZWYzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gPj4+Pj4gVmFsaWRhdGUgYnkgcGFyYWxsZWxcbiAgICB2YXIgcnVsZVByb21pc2VzID0gZmlsbGVkUnVsZXMubWFwKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVSdWxlKG5hbWUsIHZhbHVlLCBydWxlLCBvcHRpb25zLCBtZXNzYWdlVmFyaWFibGVzKS50aGVuKGZ1bmN0aW9uIChlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgICAgICBydWxlOiBydWxlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBzdW1tYXJ5UHJvbWlzZSA9ICh2YWxpZGF0ZUZpcnN0ID8gZmluaXNoT25GaXJzdEZhaWxlZChydWxlUHJvbWlzZXMpIDogZmluaXNoT25BbGxGYWlsZWQocnVsZVByb21pc2VzKSkudGhlbihmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgICAvLyBBbHdheXMgY2hhbmdlIHRvIHJlamVjdGlvbiBmb3IgRmllbGQgdG8gY2F0Y2hcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgY2F0Y2ggZXJyb3IgdG8gYXZvaWQgY29uc29sZSBlcnJvciBsb2cuXG4gIHN1bW1hcnlQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0pO1xuICByZXR1cm4gc3VtbWFyeVByb21pc2U7XG59XG5mdW5jdGlvbiBmaW5pc2hPbkFsbEZhaWxlZChfeDgpIHtcbiAgcmV0dXJuIF9maW5pc2hPbkFsbEZhaWxlZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2ZpbmlzaE9uQWxsRmFpbGVkKCkge1xuICBfZmluaXNoT25BbGxGYWlsZWQgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKHJ1bGVQcm9taXNlcykge1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCBQcm9taXNlLmFsbChydWxlUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKGVycm9yc0xpc3QpIHtcbiAgICAgICAgICAgIHZhciBfcmVmNTtcbiAgICAgICAgICAgIHZhciBlcnJvcnMgPSAoX3JlZjUgPSBbXSkuY29uY2F0LmFwcGx5KF9yZWY1LCBfdG9Db25zdW1hYmxlQXJyYXkoZXJyb3JzTGlzdCkpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpO1xuICAgICAgfVxuICAgIH0sIF9jYWxsZWUzKTtcbiAgfSkpO1xuICByZXR1cm4gX2ZpbmlzaE9uQWxsRmFpbGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5mdW5jdGlvbiBmaW5pc2hPbkZpcnN0RmFpbGVkKF94OSkge1xuICByZXR1cm4gX2ZpbmlzaE9uRmlyc3RGYWlsZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbmZ1bmN0aW9uIF9maW5pc2hPbkZpcnN0RmFpbGVkKCkge1xuICBfZmluaXNoT25GaXJzdEZhaWxlZCA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQocnVsZVByb21pc2VzKSB7XG4gICAgdmFyIGNvdW50O1xuICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7XG4gICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoXCJyZXR1cm5cIiwgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHJ1bGVQcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAocnVsZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVFcnJvci5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKFtydWxlRXJyb3JdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHJ1bGVQcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpO1xuICAgICAgfVxuICAgIH0sIF9jYWxsZWU0KTtcbiAgfSkpO1xuICByZXR1cm4gX2ZpbmlzaE9uRmlyc3RGYWlsZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gXCJyYy11dGlsL2VzL3V0aWxzL2dldFwiO1xuaW1wb3J0IHNldFZhbHVlIGZyb20gXCJyYy11dGlsL2VzL3V0aWxzL3NldFwiO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gXCIuL3R5cGVVdGlsXCI7XG5leHBvcnQgeyBnZXRWYWx1ZSwgc2V0VmFsdWUgfTtcblxuLyoqXG4gKiBDb252ZXJ0IG5hbWUgdG8gaW50ZXJuYWwgc3VwcG9ydGVkIGZvcm1hdC5cbiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGtlZXAgc2luY2Ugd2Ugc3RpbGwgdGhpbmtpbmcgaWYgbmVlZCBzdXBwb3J0IGxpa2UgYGEuYi5jYCBmb3JtYXQuXG4gKiAnYScgPT4gWydhJ11cbiAqIDEyMyA9PiBbMTIzXVxuICogWydhJywgMTIzXSA9PiBbJ2EnLCAxMjNdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lUGF0aChwYXRoKSB7XG4gIHJldHVybiB0b0FycmF5KHBhdGgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lQnlOYW1lUGF0aExpc3Qoc3RvcmUsIG5hbWVQYXRoTGlzdCkge1xuICB2YXIgbmV3U3RvcmUgPSB7fTtcbiAgbmFtZVBhdGhMaXN0LmZvckVhY2goZnVuY3Rpb24gKG5hbWVQYXRoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VmFsdWUoc3RvcmUsIG5hbWVQYXRoKTtcbiAgICBuZXdTdG9yZSA9IHNldFZhbHVlKG5ld1N0b3JlLCBuYW1lUGF0aCwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIG5ld1N0b3JlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBuYW1lUGF0aExpc3RgIGluY2x1ZGVzIGBuYW1lUGF0aGAuXG4gKiBAcGFyYW0gbmFtZVBhdGhMaXN0IEEgbGlzdCBvZiBgSW50ZXJuYWxOYW1lUGF0aFtdYFxuICogQHBhcmFtIG5hbWVQYXRoIENvbXBhcmUgYEludGVybmFsTmFtZVBhdGhgXG4gKiBAcGFyYW0gcGFydGlhbE1hdGNoIFRydWUgd2lsbCBtYWtlIGBbYSwgYl1gIG1hdGNoIGBbYSwgYiwgY11gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05hbWVQYXRoKG5hbWVQYXRoTGlzdCwgbmFtZVBhdGgpIHtcbiAgdmFyIHBhcnRpYWxNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHJldHVybiBuYW1lUGF0aExpc3QgJiYgbmFtZVBhdGhMaXN0LnNvbWUoZnVuY3Rpb24gKHBhdGgpIHtcbiAgICByZXR1cm4gbWF0Y2hOYW1lUGF0aChuYW1lUGF0aCwgcGF0aCwgcGFydGlhbE1hdGNoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG5hbWVQYXRoYCBpcyBzdXBlciBzZXQgb3IgZXF1YWwgb2YgYHN1Yk5hbWVQYXRoYC5cbiAqIEBwYXJhbSBuYW1lUGF0aCBBIGxpc3Qgb2YgYEludGVybmFsTmFtZVBhdGhbXWBcbiAqIEBwYXJhbSBzdWJOYW1lUGF0aCBDb21wYXJlIGBJbnRlcm5hbE5hbWVQYXRoYFxuICogQHBhcmFtIHBhcnRpYWxNYXRjaCBUcnVlIHdpbGwgbWFrZSBgW2EsIGJdYCBtYXRjaCBgW2EsIGIsIGNdYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hOYW1lUGF0aChuYW1lUGF0aCwgc3ViTmFtZVBhdGgpIHtcbiAgdmFyIHBhcnRpYWxNYXRjaCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIGlmICghbmFtZVBhdGggfHwgIXN1Yk5hbWVQYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghcGFydGlhbE1hdGNoICYmIG5hbWVQYXRoLmxlbmd0aCAhPT0gc3ViTmFtZVBhdGgubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBzdWJOYW1lUGF0aC5ldmVyeShmdW5jdGlvbiAobmFtZVVuaXQsIGkpIHtcbiAgICByZXR1cm4gbmFtZVBhdGhbaV0gPT09IG5hbWVVbml0O1xuICB9KTtcbn1cblxuLy8gTGlrZSBgc2hhbGxvd0VxdWFsYCwgYnV0IHdlIG5vdCBjaGVjayB0aGUgZGF0YSB3aGljaCBtYXkgY2F1c2UgcmUtcmVuZGVyXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbWlsYXIoc291cmNlLCB0YXJnZXQpIHtcbiAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFzb3VyY2UgJiYgdGFyZ2V0IHx8IHNvdXJjZSAmJiAhdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghc291cmNlIHx8ICF0YXJnZXQgfHwgX3R5cGVvZihzb3VyY2UpICE9PSAnb2JqZWN0JyB8fCBfdHlwZW9mKHRhcmdldCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIHRhcmdldEtleXMgPSBPYmplY3Qua2V5cyh0YXJnZXQpO1xuICB2YXIga2V5cyA9IG5ldyBTZXQoW10uY29uY2F0KHNvdXJjZUtleXMsIHRhcmdldEtleXMpKTtcbiAgcmV0dXJuIF90b0NvbnN1bWFibGVBcnJheShrZXlzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgaWYgKHR5cGVvZiBzb3VyY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdGFyZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlVmFsdWUgPT09IHRhcmdldFZhbHVlO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0R2V0VmFsdWVGcm9tRXZlbnQodmFsdWVQcm9wTmFtZSkge1xuICB2YXIgZXZlbnQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gIGlmIChldmVudCAmJiBldmVudC50YXJnZXQgJiYgX3R5cGVvZihldmVudC50YXJnZXQpID09PSAnb2JqZWN0JyAmJiB2YWx1ZVByb3BOYW1lIGluIGV2ZW50LnRhcmdldCkge1xuICAgIHJldHVybiBldmVudC50YXJnZXRbdmFsdWVQcm9wTmFtZV07XG4gIH1cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIE1vdmVzIGFuIGFycmF5IGl0ZW0gZnJvbSBvbmUgcG9zaXRpb24gaW4gYW4gYXJyYXkgdG8gYW5vdGhlci5cbiAqXG4gKiBOb3RlOiBUaGlzIGlzIGEgcHVyZSBmdW5jdGlvbiBzbyBhIG5ldyBhcnJheSB3aWxsIGJlIHJldHVybmVkLCBpbnN0ZWFkXG4gKiBvZiBhbHRlcmluZyB0aGUgYXJyYXkgYXJndW1lbnQuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICAgICAgQXJyYXkgaW4gd2hpY2ggdG8gbW92ZSBhbiBpdGVtLiAgICAgICAgIChyZXF1aXJlZClcbiAqIEBwYXJhbSBtb3ZlSW5kZXggICAgIFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBtb3ZlLiAgICAgICAgICAocmVxdWlyZWQpXG4gKiBAcGFyYW0gdG9JbmRleCAgICAgICBUaGUgaW5kZXggdG8gbW92ZSBpdGVtIGF0IG1vdmVJbmRleCB0by4gKHJlcXVpcmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW92ZShhcnJheSwgbW92ZUluZGV4LCB0b0luZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGlmIChtb3ZlSW5kZXggPCAwIHx8IG1vdmVJbmRleCA+PSBsZW5ndGggfHwgdG9JbmRleCA8IDAgfHwgdG9JbmRleCA+PSBsZW5ndGgpIHtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgdmFyIGl0ZW0gPSBhcnJheVttb3ZlSW5kZXhdO1xuICB2YXIgZGlmZiA9IG1vdmVJbmRleCAtIHRvSW5kZXg7XG4gIGlmIChkaWZmID4gMCkge1xuICAgIC8vIG1vdmUgbGVmdFxuICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5LnNsaWNlKDAsIHRvSW5kZXgpKSwgW2l0ZW1dLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkuc2xpY2UodG9JbmRleCwgbW92ZUluZGV4KSksIF90b0NvbnN1bWFibGVBcnJheShhcnJheS5zbGljZShtb3ZlSW5kZXggKyAxLCBsZW5ndGgpKSk7XG4gIH1cbiAgaWYgKGRpZmYgPCAwKSB7XG4gICAgLy8gbW92ZSByaWdodFxuICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5LnNsaWNlKDAsIG1vdmVJbmRleCkpLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkuc2xpY2UobW92ZUluZGV4ICsgMSwgdG9JbmRleCArIDEpKSwgW2l0ZW1dLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkuc2xpY2UodG9JbmRleCArIDEsIGxlbmd0aCkpKTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9