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
JavaScript
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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