UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

246 lines 36 kB
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var _excluded = ["afterClose", "bodyScrollable", "children", "className", "destroyAfterClose", "escapeKeyClosable", "headerContent", "headerElement", "headerStyle", "maskClassName", "maskClosable", "maskStyle", "maskVisible", "maskMotionName", "getMotionName", "onClose", "placement", "size", "style", "visible", "zIndex"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } import React, { useEffect, useMemo, useRef, useState } from "react"; import PropTypes from "prop-types"; import classNames from "classnames"; import CSSMotion from "rc-motion"; import getScrollBarSize from "rc-util/lib/getScrollBarSize"; import Button from "../button"; import Portal from "../portal"; import "./style"; var prefix = "adui-drawer"; var Drawer = function Drawer(_ref) { var afterClose = _ref.afterClose, bodyScrollable = _ref.bodyScrollable, children = _ref.children, className = _ref.className, destroyAfterClose = _ref.destroyAfterClose, escapeKeyClosable = _ref.escapeKeyClosable, headerContent = _ref.headerContent, headerElement = _ref.headerElement, headerStyle = _ref.headerStyle, maskClassName = _ref.maskClassName, maskClosable = _ref.maskClosable, maskStyle = _ref.maskStyle, maskVisible = _ref.maskVisible, maskMotionName = _ref.maskMotionName, _ref$getMotionName = _ref.getMotionName, getMotionName = _ref$getMotionName === void 0 ? function () { return ""; } : _ref$getMotionName, onClose = _ref.onClose, _ref$placement = _ref.placement, placement = _ref$placement === void 0 ? "right" : _ref$placement, size = _ref.size, style = _ref.style, visible = _ref.visible, zIndexProp = _ref.zIndex, otherProps = _objectWithoutProperties(_ref, _excluded); var zIndex = zIndexProp; var _useState = useState(visible), _useState2 = _slicedToArray(_useState, 2), hasEverOpened = _useState2[0], setHasEverOpened = _useState2[1]; var wrapperRef = useRef(null); var scrollbarWidth = useMemo(getScrollBarSize, []); var bodyIsOverflowing = false; var setScrollbarPadding = function setScrollbarPadding(_ref2) { var bodyScrollableParam = _ref2.bodyScrollable; var _window = window, innerWidth = _window.innerWidth; bodyIsOverflowing = document.body.clientWidth < innerWidth; if (bodyIsOverflowing && !document.body.style.paddingRight) { if (scrollbarWidth !== undefined) { document.body.style.paddingRight = "".concat(scrollbarWidth, "px"); } } if (bodyScrollableParam) { document.body.classList.add("adui-scrollbar-hidden"); } else { document.body.style.overflow = "hidden"; } }; var resetScrollbarPadding = function resetScrollbarPadding() { document.body.classList.remove("adui-scrollbar-hidden"); document.body.style.overflow = ""; document.body.style.paddingRight = ""; }; useEffect(function () { if (visible && wrapperRef.current) { setScrollbarPadding({ bodyScrollable: bodyScrollable }); } }, [visible]); useEffect(function () { return resetScrollbarPadding; }, []); if (visible && !hasEverOpened) { setHasEverOpened(true); } var handleChildrenMount = function handleChildrenMount() { if (visible) { setScrollbarPadding({ bodyScrollable: bodyScrollable }); } }; var handleClose = function handleClose() { if (onClose) { onClose(); } }; var handleKeyDown = function handleKeyDown(e) { if (escapeKeyClosable && e.key === "Escape") { e.stopPropagation(); handleClose(); } }; var handleEnter = function handleEnter() { if (escapeKeyClosable && wrapperRef.current) { wrapperRef.current.focus(); } }; var handleLeave = function handleLeave() { if (wrapperRef.current) { wrapperRef.current.style.display = "none"; } resetScrollbarPadding(); if (afterClose) { afterClose(); } if (destroyAfterClose) { setHasEverOpened(false); } }; var classSet = classNames(className, "".concat(prefix, "-").concat(placement), "".concat(prefix, "-").concat(size), "".concat(prefix, "-inner")); var getComponent = function getComponent() { return React.createElement("div", { className: "".concat(prefix, "-wrapper"), ref: wrapperRef, style: { display: visible ? "block" : "", zIndex: zIndex }, tabIndex: 0, role: "none", onKeyDown: handleKeyDown }, React.createElement(CSSMotion, { motionName: maskMotionName || "".concat(prefix, "-mask"), visible: visible && maskVisible }, function (_ref3, ref) { var cls = _ref3.className; return React.createElement("div", { ref: ref, className: classNames("".concat(prefix, "-mask"), maskClassName, cls), role: "none", style: maskStyle, onClick: function onClick() { if (maskClosable) { handleClose(); } } }); }), React.createElement(CSSMotion, { onAppearStart: handleEnter, onEnterStart: handleEnter, onLeaveEnd: handleLeave, motionName: getMotionName(placement) || "".concat(prefix, "-").concat(placement), visible: visible }, function (_ref4, ref) { var cls = _ref4.className; return React.createElement("div", _extends({ ref: ref, className: classNames(classSet, cls), style: _objectSpread({ margin: "auto", zIndex: 1 }, style) }, otherProps), headerElement === null ? null : headerElement || React.createElement("div", { className: "".concat(prefix, "-header"), style: headerStyle }, React.createElement(Button, { theme: "light", size: "medium", leftIcon: "cancel", className: "".concat(prefix, "-header-close"), onClick: function onClick() { return handleClose(); } }), React.createElement("i", { className: "".concat(prefix, "-header-divider") }), headerContent && React.createElement("div", { className: "".concat(prefix, "-header-content") }, headerContent)), React.createElement("div", { className: "".concat(prefix, "-body") }, children)); })); }; if (!hasEverOpened) { return null; } return React.createElement(Portal, { onChildrenMount: handleChildrenMount }, getComponent()); }; Drawer.displayName = "Drawer"; Drawer.propTypes = { afterClose: PropTypes.func, bodyScrollable: PropTypes.bool, children: PropTypes.node, className: PropTypes.string, destroyAfterClose: PropTypes.bool, escapeKeyClosable: PropTypes.bool, headerContent: PropTypes.node, headerElement: PropTypes.node, headerStyle: PropTypes.object, maskClassName: PropTypes.string, maskClosable: PropTypes.bool, maskStyle: PropTypes.object, maskVisible: PropTypes.bool, onClose: PropTypes.func, placement: PropTypes.oneOf(["top", "right", "bottom", "left"]), size: PropTypes.oneOf(["mini", "small", "medium", "large"]), visible: PropTypes.bool, zIndex: PropTypes.any }; Drawer.defaultProps = { afterClose: null, bodyScrollable: true, children: null, className: undefined, destroyAfterClose: false, escapeKeyClosable: true, headerContent: null, headerElement: undefined, headerStyle: {}, maskClassName: undefined, maskClosable: false, maskStyle: {}, maskVisible: false, maskMotionName: "", getMotionName: function getMotionName() { return ""; }, onClose: null, placement: "right", size: "medium", visible: false, zIndex: "var(--z-index-dialog)" }; export default Drawer; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlByb3BUeXBlcyIsImNsYXNzTmFtZXMiLCJDU1NNb3Rpb24iLCJnZXRTY3JvbGxCYXJTaXplIiwiQnV0dG9uIiwiUG9ydGFsIiwicHJlZml4IiwiRHJhd2VyIiwiX3JlZiIsImFmdGVyQ2xvc2UiLCJib2R5U2Nyb2xsYWJsZSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVzdHJveUFmdGVyQ2xvc2UiLCJlc2NhcGVLZXlDbG9zYWJsZSIsImhlYWRlckNvbnRlbnQiLCJoZWFkZXJFbGVtZW50IiwiaGVhZGVyU3R5bGUiLCJtYXNrQ2xhc3NOYW1lIiwibWFza0Nsb3NhYmxlIiwibWFza1N0eWxlIiwibWFza1Zpc2libGUiLCJtYXNrTW90aW9uTmFtZSIsIl9yZWYkZ2V0TW90aW9uTmFtZSIsImdldE1vdGlvbk5hbWUiLCJvbkNsb3NlIiwiX3JlZiRwbGFjZW1lbnQiLCJwbGFjZW1lbnQiLCJzaXplIiwic3R5bGUiLCJ2aXNpYmxlIiwiekluZGV4UHJvcCIsInpJbmRleCIsIm90aGVyUHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoYXNFdmVyT3BlbmVkIiwic2V0SGFzRXZlck9wZW5lZCIsIndyYXBwZXJSZWYiLCJzY3JvbGxiYXJXaWR0aCIsImJvZHlJc092ZXJmbG93aW5nIiwic2V0U2Nyb2xsYmFyUGFkZGluZyIsIl9yZWYyIiwiYm9keVNjcm9sbGFibGVQYXJhbSIsIl93aW5kb3ciLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xpZW50V2lkdGgiLCJwYWRkaW5nUmlnaHQiLCJ1bmRlZmluZWQiLCJjb25jYXQiLCJjbGFzc0xpc3QiLCJhZGQiLCJvdmVyZmxvdyIsInJlc2V0U2Nyb2xsYmFyUGFkZGluZyIsInJlbW92ZSIsImN1cnJlbnQiLCJoYW5kbGVDaGlsZHJlbk1vdW50IiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVLZXlEb3duIiwiZSIsImtleSIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZUVudGVyIiwiZm9jdXMiLCJoYW5kbGVMZWF2ZSIsImRpc3BsYXkiLCJjbGFzc1NldCIsImdldENvbXBvbmVudCIsImNyZWF0ZUVsZW1lbnQiLCJyZWYiLCJ0YWJJbmRleCIsInJvbGUiLCJvbktleURvd24iLCJtb3Rpb25OYW1lIiwiX3JlZjMiLCJjbHMiLCJvbkNsaWNrIiwib25BcHBlYXJTdGFydCIsIm9uRW50ZXJTdGFydCIsIm9uTGVhdmVFbmQiLCJfcmVmNCIsIl9leHRlbmRzIiwiX29iamVjdFNwcmVhZCIsIm1hcmdpbiIsInRoZW1lIiwibGVmdEljb24iLCJvbkNoaWxkcmVuTW91bnQiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsImZ1bmMiLCJib29sIiwibm9kZSIsInN0cmluZyIsIm9iamVjdCIsIm9uZU9mIiwiYW55IiwiZGVmYXVsdFByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9kcmF3ZXIvRHJhd2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IENTU01vdGlvbiBmcm9tIFwicmMtbW90aW9uXCJcbmltcG9ydCBnZXRTY3JvbGxCYXJTaXplIGZyb20gXCJyYy11dGlsL2xpYi9nZXRTY3JvbGxCYXJTaXplXCJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uL2J1dHRvblwiXG5pbXBvcnQgUG9ydGFsIGZyb20gXCIuLi9wb3J0YWxcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1kcmF3ZXJcIlxuXG50eXBlIFRQbGFjZW1lbnQgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSURyYXdlclByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDlhbPpl63lkI7vvIh0cmFuc2l0aW9uIOe7k+adn+WQju+8ieeahCBoYW5kbGVyXG4gICAqL1xuICBhZnRlckNsb3NlPzogKCgpID0+IHZvaWQpIHwgbnVsbFxuICAvKipcbiAgICogdmlzaWJsZSDml7bpobXpnaLog73lkKbmu5rliqhcbiAgICovXG4gIGJvZHlTY3JvbGxhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog5a2Q6IqC54K5XG4gICAqL1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCN77yM5rOo5oSPIERyYXdlciDmiYDmnInnmoTlsZ7mgKfkvJrpmYTliqDliLDlhoXpg6jnmoTlhoXlrrnlhYPntKDkuIrvvIzogIzkuI3mmK/ljIXlkKsgbWFzayDnmoTmnIDlpJblsYLlhYPntKBcbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5q+P5qyhIHZpc2libGU6IGZhbHNlIOmDvemUgOavgSBkb21cbiAgICovXG4gIGRlc3Ryb3lBZnRlckNsb3NlPzogYm9vbGVhblxuICAvKipcbiAgICog5piv5ZCm5pSv5oyBIEVTQyDlhbPpl61cbiAgICovXG4gIGVzY2FwZUtleUNsb3NhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICogaGVhZGVyIOagh+mimOagj+WGhemDqOeahOWGheWuuVxuICAgKi9cbiAgaGVhZGVyQ29udGVudD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog5a6M5YWo6Ieq5a6a5LmJIGhlYWRlciDnmoTlhoXlrrlcbiAgICovXG4gIGhlYWRlckVsZW1lbnQ/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIOiuvue9riBoZWFkZXIg5qC35byPXG4gICAqL1xuICBoZWFkZXJTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgLyoqXG4gICAqIG1hc2sg55qE57G75ZCNXG4gICAqL1xuICBtYXNrQ2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDngrnlh7sgbWFzayDmmK/lkKbop6blj5EgY2FuY2VsIOS6i+S7tlxuICAgKi9cbiAgbWFza0Nsb3NhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICogbWFzayDnmoTmoLflvI9cbiAgICovXG4gIG1hc2tTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuiBtYXNrXG4gICAqL1xuICBtYXNrVmlzaWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOiuvue9riBtYXNrIOeahCBDU1MgTW90aW9uIG5hbWVcbiAgICovXG4gIG1hc2tNb3Rpb25OYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDorr7nva4gZGlhbG9nIOeahCBDU1MgTW90aW9uIG5hbWVcbiAgICovXG4gIGdldE1vdGlvbk5hbWU/OiAocGxhY2VtZW50OiBUUGxhY2VtZW50KSA9PiBzdHJpbmdcbiAgLyoqXG4gICAqIOWFs+mXreaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNsb3NlPzogKCgpID0+IHZvaWQpIHwgbnVsbFxuICAvKipcbiAgICog5L2N572uXG4gICAqL1xuICBwbGFjZW1lbnQ/OiBUUGxhY2VtZW50XG4gIC8qKlxuICAgKiDlsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muaYr+WQpuaYvuekulxuICAgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOiuvue9riB6LWluZGV4IOWxgue6p++8jOm7mOiupOS4uiB2YXIoLS16LWluZGV4LWRpYWxvZylcbiAgICovXG4gIHpJbmRleD86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG4vKipcbiAqIOa1ruWxguimhuebluWcqOmhtemdouWGheWuueS4iu+8jOW5tuWbuuWumuWcqOWxj+W5leeahOi+uee8mOOAglxuICovXG5jb25zdCBEcmF3ZXI6IFJlYWN0LkZDPElEcmF3ZXJQcm9wcz4gPSAoe1xuICBhZnRlckNsb3NlLFxuICBib2R5U2Nyb2xsYWJsZSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVzdHJveUFmdGVyQ2xvc2UsXG4gIGVzY2FwZUtleUNsb3NhYmxlLFxuICBoZWFkZXJDb250ZW50LFxuICBoZWFkZXJFbGVtZW50LFxuICBoZWFkZXJTdHlsZSxcbiAgbWFza0NsYXNzTmFtZSxcbiAgbWFza0Nsb3NhYmxlLFxuICBtYXNrU3R5bGUsXG4gIG1hc2tWaXNpYmxlLFxuICBtYXNrTW90aW9uTmFtZSxcbiAgZ2V0TW90aW9uTmFtZSA9ICgpID0+IFwiXCIsXG4gIG9uQ2xvc2UsXG4gIHBsYWNlbWVudCA9IFwicmlnaHRcIixcbiAgc2l6ZSxcbiAgc3R5bGUsXG4gIHZpc2libGUsXG4gIHpJbmRleDogekluZGV4UHJvcCxcbiAgLi4ub3RoZXJQcm9wc1xufTogSURyYXdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHpJbmRleCA9IHpJbmRleFByb3AgYXMgUmVhY3QuQ1NTUHJvcGVydGllc1tcInpJbmRleFwiXVxuICBjb25zdCBbaGFzRXZlck9wZW5lZCwgc2V0SGFzRXZlck9wZW5lZF0gPSB1c2VTdGF0ZSh2aXNpYmxlKVxuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdXNlTWVtbyhnZXRTY3JvbGxCYXJTaXplLCBbXSlcbiAgbGV0IGJvZHlJc092ZXJmbG93aW5nID0gZmFsc2VcblxuICBjb25zdCBzZXRTY3JvbGxiYXJQYWRkaW5nID0gKHtcbiAgICBib2R5U2Nyb2xsYWJsZTogYm9keVNjcm9sbGFibGVQYXJhbSxcbiAgfToge1xuICAgIGJvZHlTY3JvbGxhYmxlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbm5lcldpZHRoIH0gPSB3aW5kb3dcbiAgICBib2R5SXNPdmVyZmxvd2luZyA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPCBpbm5lcldpZHRoXG4gICAgaWYgKGJvZHlJc092ZXJmbG93aW5nICYmICFkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCkge1xuICAgICAgaWYgKHNjcm9sbGJhcldpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYm9keVNjcm9sbGFibGVQYXJhbSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYWR1aS1zY3JvbGxiYXItaGlkZGVuXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzZXRTY3JvbGxiYXJQYWRkaW5nID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImFkdWktc2Nyb2xsYmFyLWhpZGRlblwiKVxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcIlwiXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBcIlwiXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2aXNpYmxlICYmIHdyYXBwZXJSZWYuY3VycmVudCkge1xuICAgICAgc2V0U2Nyb2xsYmFyUGFkZGluZyh7IGJvZHlTY3JvbGxhYmxlIH0pXG4gICAgfVxuICB9LCBbdmlzaWJsZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHJlc2V0U2Nyb2xsYmFyUGFkZGluZywgW10pXG5cbiAgLy8g55u45b2T5LqO55Sf5ZG95ZGo5pyfIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICBpZiAodmlzaWJsZSAmJiAhaGFzRXZlck9wZW5lZCkge1xuICAgIHNldEhhc0V2ZXJPcGVuZWQodHJ1ZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoaWxkcmVuTW91bnQgPSAoKSA9PiB7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIHNldFNjcm9sbGJhclBhZGRpbmcoeyBib2R5U2Nyb2xsYWJsZSB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXNjYXBlS2V5Q2xvc2FibGUgJiYgZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHtcbiAgICBpZiAoZXNjYXBlS2V5Q2xvc2FibGUgJiYgd3JhcHBlclJlZi5jdXJyZW50KSB7XG4gICAgICB3cmFwcGVyUmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUxlYXZlID0gKCkgPT4ge1xuICAgIGlmICh3cmFwcGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbiAgICB9XG4gICAgcmVzZXRTY3JvbGxiYXJQYWRkaW5nKClcblxuICAgIGlmIChhZnRlckNsb3NlKSB7XG4gICAgICBhZnRlckNsb3NlKClcbiAgICB9XG5cbiAgICBpZiAoZGVzdHJveUFmdGVyQ2xvc2UpIHtcbiAgICAgIHNldEhhc0V2ZXJPcGVuZWQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKFxuICAgIGNsYXNzTmFtZSxcbiAgICBgJHtwcmVmaXh9LSR7cGxhY2VtZW50fWAsXG4gICAgYCR7cHJlZml4fS0ke3NpemV9YCxcbiAgICBgJHtwcmVmaXh9LWlubmVyYFxuICApXG5cbiAgY29uc3QgZ2V0Q29tcG9uZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS13cmFwcGVyYH1cbiAgICAgICAgcmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6IHZpc2libGUgPyBcImJsb2NrXCIgOiBcIlwiLFxuICAgICAgICAgIHpJbmRleCxcbiAgICAgICAgfX1cbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgPlxuICAgICAgICA8Q1NTTW90aW9uXG4gICAgICAgICAgbW90aW9uTmFtZT17bWFza01vdGlvbk5hbWUgfHwgYCR7cHJlZml4fS1tYXNrYH1cbiAgICAgICAgICB2aXNpYmxlPXt2aXNpYmxlICYmIG1hc2tWaXNpYmxlfVxuICAgICAgICA+XG4gICAgICAgICAgeyh7IGNsYXNzTmFtZTogY2xzIH0sIHJlZikgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tbWFza2AsIG1hc2tDbGFzc05hbWUsIGNscyl9XG4gICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgc3R5bGU9e21hc2tTdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtYXNrQ2xvc2FibGUpIHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ1NTTW90aW9uPlxuICAgICAgICA8Q1NTTW90aW9uXG4gICAgICAgICAgb25BcHBlYXJTdGFydD17aGFuZGxlRW50ZXJ9XG4gICAgICAgICAgb25FbnRlclN0YXJ0PXtoYW5kbGVFbnRlcn1cbiAgICAgICAgICBvbkxlYXZlRW5kPXtoYW5kbGVMZWF2ZX1cbiAgICAgICAgICBtb3Rpb25OYW1lPXtnZXRNb3Rpb25OYW1lKHBsYWNlbWVudCkgfHwgYCR7cHJlZml4fS0ke3BsYWNlbWVudH1gfVxuICAgICAgICAgIHZpc2libGU9e3Zpc2libGV9XG4gICAgICAgID5cbiAgICAgICAgICB7KHsgY2xhc3NOYW1lOiBjbHMgfSwgcmVmKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3NTZXQsIGNscyl9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aGVhZGVyRWxlbWVudCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogaGVhZGVyRWxlbWVudCB8fCAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWhlYWRlcmB9IHN0eWxlPXtoZWFkZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRJY29uPVwiY2FuY2VsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1oZWFkZXItY2xvc2VgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xvc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT17YCR7cHJlZml4fS1oZWFkZXItZGl2aWRlcmB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAge2hlYWRlckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0taGVhZGVyLWNvbnRlbnRgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlckNvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWJvZHlgfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NTU01vdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIGlmICghaGFzRXZlck9wZW5lZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gPFBvcnRhbCBvbkNoaWxkcmVuTW91bnQ9e2hhbmRsZUNoaWxkcmVuTW91bnR9PntnZXRDb21wb25lbnQoKX08L1BvcnRhbD5cbn1cblxuRHJhd2VyLmRpc3BsYXlOYW1lID0gXCJEcmF3ZXJcIlxuXG5EcmF3ZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog5YWz6Zet5ZCO77yIdHJhbnNpdGlvbiDnu5PmnZ/lkI7vvInnmoQgaGFuZGxlclxuICAgKi9cbiAgYWZ0ZXJDbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiB2aXNpYmxlIOaXtumhtemdouiDveWQpua7muWKqFxuICAgKi9cbiAgYm9keVNjcm9sbGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5a2Q6IqC54K5XG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI3vvIzms6jmhI8gRGlhbG9nIOaJgOacieeahOWxnuaAp+S8mumZhOWKoOWIsOWGhemDqOeahOWGheWuueWFg+e0oOS4iu+8jOiAjOS4jeaYr+WMheWQqyBtYXNrIOeahOacgOWkluWxguWFg+e0oFxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5q+P5qyhIHZpc2libGU6IGZhbHNlIOmDvemUgOavgSBkb21cbiAgICovXG4gIGRlc3Ryb3lBZnRlckNsb3NlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgSBFU0Mg5YWz6ZetXG4gICAqL1xuICBlc2NhcGVLZXlDbG9zYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBoZWFkZXIg5qCH6aKY5qCP5YaF6YOo55qE5YaF5a65XG4gICAqL1xuICBoZWFkZXJDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIOWujOWFqOiHquWumuS5iSBoZWFkZXIg55qE5YaF5a65XG4gICAqL1xuICBoZWFkZXJFbGVtZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIOiuvue9riBoZWFkZXIg5qC35byPXG4gICAqL1xuICBoZWFkZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIG1hc2sg55qE57G75ZCNXG4gICAqL1xuICBtYXNrQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog54K55Ye7IG1hc2sg5piv5ZCm6Kem5Y+RIGNhbmNlbCDkuovku7ZcbiAgICovXG4gIG1hc2tDbG9zYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBtYXNrIOeahOagt+W8j1xuICAgKi9cbiAgbWFza1N0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog5piv5ZCm5pi+56S6IG1hc2tcbiAgICovXG4gIG1hc2tWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWFs+mXreaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOS9jee9rlxuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcbiAgLyoqXG4gICAqIOWwuuWvuFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm1pbmlcIiwgXCJzbWFsbFwiLCBcIm1lZGl1bVwiLCBcImxhcmdlXCJdKSxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muaYr+WQpuaYvuekulxuICAgKi9cbiAgdmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDorr7nva4gei1pbmRleCDlsYLnuqfvvIzpu5jorqTkuLogdmFyKC0tei1pbmRleC1kaWFsb2cpXG4gICAqL1xuICB6SW5kZXg6IFByb3BUeXBlcy5hbnksXG59XG5cbkRyYXdlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGFmdGVyQ2xvc2U6IG51bGwsXG4gIGJvZHlTY3JvbGxhYmxlOiB0cnVlLFxuICBjaGlsZHJlbjogbnVsbCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGRlc3Ryb3lBZnRlckNsb3NlOiBmYWxzZSxcbiAgZXNjYXBlS2V5Q2xvc2FibGU6IHRydWUsXG4gIGhlYWRlckNvbnRlbnQ6IG51bGwsXG4gIGhlYWRlckVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgaGVhZGVyU3R5bGU6IHt9LFxuICBtYXNrQ2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIG1hc2tDbG9zYWJsZTogZmFsc2UsXG4gIG1hc2tTdHlsZToge30sXG4gIG1hc2tWaXNpYmxlOiBmYWxzZSxcbiAgbWFza01vdGlvbk5hbWU6IFwiXCIsXG4gIGdldE1vdGlvbk5hbWU6ICgpID0+IFwiXCIsXG4gIG9uQ2xvc2U6IG51bGwsXG4gIHBsYWNlbWVudDogXCJyaWdodFwiLFxuICBzaXplOiBcIm1lZGl1bVwiLFxuICB2aXNpYmxlOiBmYWxzZSxcbiAgekluZGV4OiBcInZhcigtLXotaW5kZXgtZGlhbG9nKVwiLFxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtBQUssSUFBSUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDbkUsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsT0FBT0MsZ0JBQWdCLE1BQU0sOEJBQThCO0FBQzNELE9BQU9DLE1BQU0sTUFBTSxXQUFXO0FBQzlCLE9BQU9DLE1BQU0sTUFBTSxXQUFXO0FBQzlCLE9BQU8sU0FBUztBQUVoQixJQUFNQyxNQUFNLEdBQUcsYUFBYTtBQTJGNUIsSUFBTUMsTUFBOEIsR0FBRyxTQUFqQ0EsTUFBOEJBLENBQUFDLElBQUEsRUF1QmhCO0VBQUEsSUF0QmxCQyxVQUFVLEdBQUFELElBQUEsQ0FBVkMsVUFBVTtJQUNWQyxjQUFjLEdBQUFGLElBQUEsQ0FBZEUsY0FBYztJQUNkQyxRQUFRLEdBQUFILElBQUEsQ0FBUkcsUUFBUTtJQUNSQyxTQUFTLEdBQUFKLElBQUEsQ0FBVEksU0FBUztJQUNUQyxpQkFBaUIsR0FBQUwsSUFBQSxDQUFqQkssaUJBQWlCO0lBQ2pCQyxpQkFBaUIs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