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 (207 loc) 33.8 kB
var _excluded = ["autoFocus", "className", "countHanzi", "defaultValue", "disabled", "id", "inputClassName", "inputStyle", "intent", "limit", "name", "onBlur", "onChange", "onFocus", "onKeyDown", "onPressEnter", "onScroll", "placeholder", "required", "resize", "size", "theme", "type", "value"]; function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } import React, { forwardRef, useContext, useImperativeHandle, useRef, useState } from "react"; import PropTypes from "prop-types"; import classNames from "classnames"; import warning from "../_util/warning"; import { ConfigContext, getComputedSize } from "../config-provider"; import "./style"; var noop = function noop() {}; var prefix = "adui-input"; var Textarea = forwardRef(function (_ref, ref) { var _classNames; var autoFocus = _ref.autoFocus, className = _ref.className, countHanzi = _ref.countHanzi, defaultValue = _ref.defaultValue, disabled = _ref.disabled, id = _ref.id, inputClassName = _ref.inputClassName, inputStyle = _ref.inputStyle, intent = _ref.intent, limit = _ref.limit, name = _ref.name, onBlur = _ref.onBlur, onChange = _ref.onChange, onFocus = _ref.onFocus, onKeyDown = _ref.onKeyDown, onPressEnter = _ref.onPressEnter, onScroll = _ref.onScroll, placeholder = _ref.placeholder, required = _ref.required, resize = _ref.resize, sizeProp = _ref.size, theme = _ref.theme, type = _ref.type, value = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), focused = _useState2[0], setFocused = _useState2[1]; var textareaRef = useRef(null); var _useContext = useContext(ConfigContext), sizeContext = _useContext.size; var size = getComputedSize(sizeProp, sizeContext); var handleChange = function handleChange(e) { if (!disabled && onChange) { var val = e.target.value.replace(/\u0008|\u0009|\u000B|\u000C|\u000D|\u00A0|\u2028|\u2029|\uFEFF/g, ""); onChange(e, val); } }; var handleKeyDown = function handleKeyDown(e) { if (e.key === "Enter" && onPressEnter) { onPressEnter(e); } if (onKeyDown) { onKeyDown(e); } }; var handleBlur = function handleBlur(e) { setFocused(false); if (onBlur) { onBlur(e); } }; var handleFocus = function handleFocus(e) { setFocused(true); if (onFocus) { onFocus(e); } }; var fixControlledValue = function fixControlledValue(val) { if (typeof val === "undefined" || val === null) { return ""; } return val; }; var getFormatStrLeng = function getFormatStrLeng(str) { var len = str.length; var realLength = 0; var charCode = -1; for (var i = 0; i < len; i += 1) { charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128) { realLength += 0.5; } else { realLength += 1; } } return Math.ceil(realLength); }; useImperativeHandle(ref, function () { return { input: textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current, handleChange: handleChange, handleKeyDown: handleKeyDown, handleBlur: handleBlur, handleFocus: handleFocus }; }); var textareaProps = { autoFocus: autoFocus, className: classNames("".concat(prefix, "-base"), inputClassName), disabled: disabled, id: id, name: name, onBlur: handleBlur, onChange: handleChange, onFocus: handleFocus, onKeyDown: handleKeyDown, onScroll: onScroll, placeholder: placeholder, ref: textareaRef, required: required, style: _objectSpread({ resize: resize }, inputStyle), type: type }; if (value !== null) { textareaProps.value = fixControlledValue(value); } else { textareaProps.defaultValue = fixControlledValue(defaultValue); } var length; if (limit) { warning(resize === "none", "Input.Textarea", "不允许同时使用 prop `limit` 与 prop `resize`"); if (value) { length = countHanzi ? getFormatStrLeng(value) : value.length; } else { warning(value !== null, "Input.Textarea", "如果要限制字数,必须从外部控制 value。"); length = 0; } } var classSet = classNames(className, "".concat(prefix, "-wrapper"), "".concat(prefix, "-wrapper_textarea"), "".concat(prefix, "-").concat(size), (_classNames = {}, _defineProperty(_classNames, "".concat(prefix, "-").concat(theme), theme), _defineProperty(_classNames, "".concat(prefix, "-resizable"), resize !== "none"), _defineProperty(_classNames, "".concat(prefix, "-disabled"), disabled), _defineProperty(_classNames, "".concat(prefix, "-limited"), !!limit), _defineProperty(_classNames, "".concat(prefix, "-normal"), intent === "normal"), _defineProperty(_classNames, "".concat(prefix, "-primary"), intent === "primary"), _defineProperty(_classNames, "".concat(prefix, "-success"), intent === "success"), _defineProperty(_classNames, "".concat(prefix, "-warning"), intent === "warning"), _defineProperty(_classNames, "".concat(prefix, "-danger"), intent === "danger" || length && limit && length > limit), _defineProperty(_classNames, "".concat(prefix, "-focused"), focused), _classNames)); return React.createElement("div", _extends({ className: classSet }, otherProps), React.createElement("textarea", textareaProps), !!limit && React.createElement("div", { className: "".concat(prefix, "-limit") }, React.createElement("span", null, "".concat(length, "/").concat(limit)))); }); Textarea.propTypes = { autoFocus: PropTypes.bool, className: PropTypes.string, countHanzi: PropTypes.bool, defaultValue: PropTypes.string, disabled: PropTypes.bool, id: PropTypes.string, inputClassName: PropTypes.string, inputStyle: PropTypes.object, intent: PropTypes.oneOf(["normal", "primary", "success", "warning", "danger"]), limit: PropTypes.number, name: PropTypes.string, onBlur: PropTypes.func, onChange: PropTypes.func, onFocus: PropTypes.func, onKeyDown: PropTypes.func, onPressEnter: PropTypes.func, onScroll: PropTypes.func, placeholder: PropTypes.string, required: PropTypes.bool, resize: PropTypes.oneOf(["none", "both", "horizontal", "vertical"]), size: PropTypes.oneOf(["mini", "small", "medium", "large"]), theme: PropTypes.oneOf([null, "light"]), type: PropTypes.string, value: PropTypes.string }; Textarea.defaultProps = { autoFocus: false, className: undefined, countHanzi: true, defaultValue: null, disabled: false, id: null, inputClassName: undefined, inputStyle: {}, intent: "normal", limit: null, name: null, onBlur: noop, onChange: noop, onFocus: noop, onKeyDown: noop, onPressEnter: noop, onScroll: noop, placeholder: "请输入", required: false, resize: "none", size: "small", theme: null, type: null, value: null }; Textarea.displayName = "Textarea"; export default Textarea; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIndhcm5pbmciLCJDb25maWdDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwibm9vcCIsInByZWZpeCIsIlRleHRhcmVhIiwicmVmIiwiYXV0b0ZvY3VzIiwiY2xhc3NOYW1lIiwiY291bnRIYW56aSIsImRlZmF1bHRWYWx1ZSIsImRpc2FibGVkIiwiaWQiLCJpbnB1dENsYXNzTmFtZSIsImlucHV0U3R5bGUiLCJpbnRlbnQiLCJsaW1pdCIsIm5hbWUiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbktleURvd24iLCJvblByZXNzRW50ZXIiLCJvblNjcm9sbCIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJyZXNpemUiLCJzaXplUHJvcCIsInNpemUiLCJ0aGVtZSIsInR5cGUiLCJ2YWx1ZSIsIm90aGVyUHJvcHMiLCJmb2N1c2VkIiwic2V0Rm9jdXNlZCIsInRleHRhcmVhUmVmIiwic2l6ZUNvbnRleHQiLCJoYW5kbGVDaGFuZ2UiLCJlIiwidmFsIiwidGFyZ2V0IiwicmVwbGFjZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJoYW5kbGVCbHVyIiwiaGFuZGxlRm9jdXMiLCJmaXhDb250cm9sbGVkVmFsdWUiLCJnZXRGb3JtYXRTdHJMZW5nIiwic3RyIiwibGVuIiwibGVuZ3RoIiwicmVhbExlbmd0aCIsImNoYXJDb2RlIiwiaSIsImNoYXJDb2RlQXQiLCJNYXRoIiwiY2VpbCIsImlucHV0IiwiY3VycmVudCIsInRleHRhcmVhUHJvcHMiLCJzdHlsZSIsImNsYXNzU2V0IiwicHJvcFR5cGVzIiwiYm9vbCIsInN0cmluZyIsIm9iamVjdCIsIm9uZU9mIiwibnVtYmVyIiwiZnVuYyIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsImRpc3BsYXlOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9pbnB1dC9UZXh0YXJlYS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCB3YXJuaW5nIGZyb20gXCIuLi9fdXRpbC93YXJuaW5nXCJcbmltcG9ydCB7IENvbmZpZ0NvbnRleHQsIGdldENvbXB1dGVkU2l6ZSB9IGZyb20gXCIuLi9jb25maWctcHJvdmlkZXJcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktaW5wdXRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIElUZXh0YXJlYVByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSBhdXRvRm9jdXNcbiAgICovXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDmmK/lkKbmjInnhafkuIDkuKrmsYnlrZfnrpcgMiDlrZfmlbDnmoTmlrnlvI/pmZDliLbplb/luqZcbiAgICovXG4gIGNvdW50SGFuemk/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpu5jorqTlgLwgLSDlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiDovpPlhaXmoYbnmoQgaWRcbiAgICovXG4gIGlkPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog57G75Z6LXG4gICAqL1xuICBpbnRlbnQ/OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuICAvKipcbiAgICog5L2c55So5YiwIGlucHV0IOWFg+e0oOeahOexu+WQjVxuICAgKi9cbiAgaW5wdXRDbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTmoLflvI9cbiAgICovXG4gIGlucHV0U3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIC8qKlxuICAgKiDpmZDliLbplb/luqZcbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgbnVsbFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gbmFtZVxuICAgKi9cbiAgbmFtZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIGJsdXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmx1cj86IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4sIHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkXG4gIC8qKlxuICAgKiBmb2N1cyDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25Gb2N1cz86IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBrZXlkb3duIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbktleURvd24/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICogZW50ZXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uUHJlc3NFbnRlcj86IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBzY3JvbGwg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uU2Nyb2xsPzogKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIHBsYWNlaG9sZGVyXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gcmVxdWlyZWRcbiAgICovXG4gIHJlcXVpcmVkPzogYm9vbGVhblxuICAvKipcbiAgICog5piv5ZCm5pSv5oyB6LCD5pW05aSn5bCPXG4gICAqL1xuICByZXNpemU/OiBcIm5vbmVcIiB8IFwiYm90aFwiIHwgXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCJcbiAgLyoqXG4gICAqIOiuvue9ruWwuuWvuFxuICAgKi9cbiAgc2l6ZT86IFwibWluaVwiIHwgXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIlxuICAvKipcbiAgICog6K6+572u5Li76aKYXG4gICAqL1xuICB0aGVtZT86IG51bGwgfCBcImxpZ2h0XCJcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIHR5cGVcbiAgICovXG4gIHR5cGU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDlgLwgLSDlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVsbFxufVxuXG4vKipcbiAqIOi+k+WFpeWMuuWfn++8jOeUqOS6juWkmuihjOe6r+aWh+acrOe8lui+keOAglxuICovXG5jb25zdCBUZXh0YXJlYTogUmVhY3QuRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxcbiAgSVRleHRhcmVhUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbj4gPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY291bnRIYW56aSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaWQsXG4gICAgICBpbnB1dENsYXNzTmFtZSxcbiAgICAgIGlucHV0U3R5bGUsXG4gICAgICBpbnRlbnQsXG4gICAgICBsaW1pdCxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvblByZXNzRW50ZXIsXG4gICAgICBvblNjcm9sbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVxdWlyZWQsXG4gICAgICByZXNpemUsXG4gICAgICBzaXplOiBzaXplUHJvcCxcbiAgICAgIHRoZW1lLFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElUZXh0YXJlYVByb3BzLFxuICAgIHJlZlxuICApID0+IHtcbiAgICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAgIGNvbnN0IHRleHRhcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpXG5cbiAgICBjb25zdCB7IHNpemU6IHNpemVDb250ZXh0IH0gPSB1c2VDb250ZXh0KENvbmZpZ0NvbnRleHQpXG5cbiAgICBjb25zdCBzaXplID0gZ2V0Q29tcHV0ZWRTaXplKHNpemVQcm9wLCBzaXplQ29udGV4dClcblxuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlZCAmJiBvbkNoYW5nZSkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250cm9sLXJlZ2V4LCBtYXgtbGVuICovXG4gICAgICAgIC8vIDA4IEJhY2tzcGFjZSwgMDkgVGFiLCAwQiDlnoLnm7TliLbooajnrKYsIDBDIOaNoumhtSwgMEQg5Zue6L2mLCBBMCDkuI3pl7Tmlq3nqbrmoLwsXG4gICAgICAgIC8vIDIwMjgvMjAyOSDliIbpmpTnrKYsIEZFZmYg5a2X6IqC6aG65bqP5qCH6K6w44CCXG4gICAgICAgIGNvbnN0IHZhbCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgL1xcdTAwMDh8XFx1MDAwOXxcXHUwMDBCfFxcdTAwMEN8XFx1MDAwRHxcXHUwMEEwfFxcdTIwMjh8XFx1MjAyOXxcXHVGRUZGL2csXG4gICAgICAgICAgXCJcIlxuICAgICAgICApXG4gICAgICAgIG9uQ2hhbmdlKGUsIHZhbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiICYmIG9uUHJlc3NFbnRlcikge1xuICAgICAgICBvblByZXNzRW50ZXIoZSlcbiAgICAgIH1cbiAgICAgIGlmIChvbktleURvd24pIHtcbiAgICAgICAgb25LZXlEb3duKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQmx1ciA9IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKVxuICAgICAgaWYgKG9uQmx1cikge1xuICAgICAgICBvbkJsdXIoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpXG4gICAgICBpZiAob25Gb2N1cykge1xuICAgICAgICBvbkZvY3VzKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZml4Q29udHJvbGxlZFZhbHVlID0gKHZhbD86IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInVuZGVmaW5lZFwiIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJcIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbFxuICAgIH1cblxuICAgIGNvbnN0IGdldEZvcm1hdFN0ckxlbmcgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcbiAgICAgIGxldCByZWFsTGVuZ3RoID0gMFxuICAgICAgbGV0IGNoYXJDb2RlID0gLTFcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgICAgICBpZiAoY2hhckNvZGUgPj0gMCAmJiBjaGFyQ29kZSA8PSAxMjgpIHtcbiAgICAgICAgICByZWFsTGVuZ3RoICs9IDAuNVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlYWxMZW5ndGggKz0gMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHJlYWxMZW5ndGgpXG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBpbnB1dDogdGV4dGFyZWFSZWY/LmN1cnJlbnQsXG4gICAgICBoYW5kbGVDaGFuZ2UsXG4gICAgICBoYW5kbGVLZXlEb3duLFxuICAgICAgaGFuZGxlQmx1cixcbiAgICAgIGhhbmRsZUZvY3VzLFxuICAgIH0pKVxuXG4gICAgY29uc3QgdGV4dGFyZWFQcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhgJHtwcmVmaXh9LWJhc2VgLCBpbnB1dENsYXNzTmFtZSksXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uU2Nyb2xsLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWY6IHRleHRhcmVhUmVmLFxuICAgICAgcmVxdWlyZWQsXG4gICAgICBzdHlsZTogeyByZXNpemUsIC4uLmlucHV0U3R5bGUgfSxcbiAgICAgIHR5cGUsXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0ZXh0YXJlYVByb3BzLnZhbHVlID0gZml4Q29udHJvbGxlZFZhbHVlKHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0YXJlYVByb3BzLmRlZmF1bHRWYWx1ZSA9IGZpeENvbnRyb2xsZWRWYWx1ZShkZWZhdWx0VmFsdWUpXG4gICAgfVxuXG4gICAgbGV0IGxlbmd0aFxuICAgIGlmIChsaW1pdCkge1xuICAgICAgd2FybmluZyhcbiAgICAgICAgcmVzaXplID09PSBcIm5vbmVcIixcbiAgICAgICAgXCJJbnB1dC5UZXh0YXJlYVwiLFxuICAgICAgICBcIuS4jeWFgeiuuOWQjOaXtuS9v+eUqCBwcm9wIGBsaW1pdGAg5LiOIHByb3AgYHJlc2l6ZWBcIlxuICAgICAgKVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGxlbmd0aCA9IGNvdW50SGFuemkgPyBnZXRGb3JtYXRTdHJMZW5nKHZhbHVlKSA6IHZhbHVlLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCxcbiAgICAgICAgICBcIklucHV0LlRleHRhcmVhXCIsXG4gICAgICAgICAgXCLlpoLmnpzopoHpmZDliLblrZfmlbDvvIzlv4Xpobvku47lpJbpg6jmjqfliLYgdmFsdWXjgIJcIlxuICAgICAgICApXG4gICAgICAgIGxlbmd0aCA9IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBgJHtwcmVmaXh9LXdyYXBwZXJgLFxuICAgICAgYCR7cHJlZml4fS13cmFwcGVyX3RleHRhcmVhYCxcbiAgICAgIGAke3ByZWZpeH0tJHtzaXplfWAsXG4gICAgICB7XG4gICAgICAgIFtgJHtwcmVmaXh9LSR7dGhlbWV9YF06IHRoZW1lLFxuICAgICAgICBbYCR7cHJlZml4fS1yZXNpemFibGVgXTogcmVzaXplICE9PSBcIm5vbmVcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tZGlzYWJsZWRgXTogZGlzYWJsZWQsXG4gICAgICAgIFtgJHtwcmVmaXh9LWxpbWl0ZWRgXTogISFsaW1pdCxcbiAgICAgICAgW2Ake3ByZWZpeH0tbm9ybWFsYF06IGludGVudCA9PT0gXCJub3JtYWxcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tcHJpbWFyeWBdOiBpbnRlbnQgPT09IFwicHJpbWFyeVwiLFxuICAgICAgICBbYCR7cHJlZml4fS1zdWNjZXNzYF06IGludGVudCA9PT0gXCJzdWNjZXNzXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LXdhcm5pbmdgXTogaW50ZW50ID09PSBcIndhcm5pbmdcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tZGFuZ2VyYF06XG4gICAgICAgICAgaW50ZW50ID09PSBcImRhbmdlclwiIHx8IChsZW5ndGggJiYgbGltaXQgJiYgbGVuZ3RoID4gbGltaXQpLFxuICAgICAgICBbYCR7cHJlZml4fS1mb2N1c2VkYF06IGZvY3VzZWQsXG4gICAgICB9XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc1NldH0gey4uLm90aGVyUHJvcHN9PlxuICAgICAgICA8dGV4dGFyZWEgey4uLnRleHRhcmVhUHJvcHN9IC8+XG4gICAgICAgIHshIWxpbWl0ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1saW1pdGB9PlxuICAgICAgICAgICAgPHNwYW4+e2Ake2xlbmd0aH0vJHtsaW1pdH1gfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuKVxuXG5UZXh0YXJlYS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSBhdXRvRm9jdXNcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuaMieeFp+S4gOS4quaxieWtl+eulyAyIOWtl+aVsOeahOaWueW8j+mZkOWItumVv+W6plxuICAgKi9cbiAgY291bnRIYW56aTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDpu5jorqTlgLwgLSDlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6L6T5YWl5qGG55qEIGlkXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTnsbvlkI1cbiAgICovXG4gIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5L2c55So5YiwIGlucHV0IOWFg+e0oOeahOagt+W8j1xuICAgKi9cbiAgaW5wdXRTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOiuvue9ruexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwibm9ybWFsXCIsXG4gICAgXCJwcmltYXJ5XCIsXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJkYW5nZXJcIixcbiAgXSksXG4gIC8qKlxuICAgKiDpmZDliLbplb/luqZcbiAgICovXG4gIGxpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogdGV4dGFyZWEg5qCH562+5Y6f55Sf5bGe5oCnIC0gbmFtZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIGJsdXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogZm9jdXMg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICoga2V5ZG93biDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGVudGVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblByZXNzRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogc2Nyb2xsIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblNjcm9sbDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSByZXF1aXJlZFxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5piv5ZCm5pSv5oyB6LCD5pW05aSn5bCPXG4gICAqL1xuICByZXNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwiYm90aFwiLCBcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSksXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJtaW5pXCIsIFwic21hbGxcIiwgXCJtZWRpdW1cIiwgXCJsYXJnZVwiXSksXG4gIC8qKlxuICAgKiDorr7nva7kuLvpophcbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2YoW251bGwsIFwibGlnaHRcIl0pLFxuICAvKipcbiAgICogdGV4dGFyZWEg5qCH562+5Y6f55Sf5bGe5oCnIC0gdHlwZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOWAvCAtIOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG59XG5cblRleHRhcmVhLmRlZmF1bHRQcm9wcyA9IHtcbiAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGNvdW50SGFuemk6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBpZDogbnVsbCxcbiAgaW5wdXRDbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgaW5wdXRTdHlsZToge30sXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgbGltaXQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIG9uQmx1cjogbm9vcCxcbiAgb25DaGFuZ2U6IG5vb3AsXG4gIG9uRm9jdXM6IG5vb3AsXG4gIG9uS2V5RG93bjogbm9vcCxcbiAgb25QcmVzc0VudGVyOiBub29wLFxuICBvblNjcm9sbDogbm9vcCxcbiAgcGxhY2Vob2xkZXI6IFwi6K+36L6T5YWlXCIsXG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgcmVzaXplOiBcIm5vbmVcIixcbiAgc2l6ZTogXCJzbWFsbFwiLFxuICB0aGVtZTogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG59XG5cblRleHRhcmVhLmRpc3BsYXlOYW1lID0gXCJUZXh0YXJlYVwiXG5cbmV4cG9ydCBkZWZh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