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>
218 lines (217 loc) • 44.1 kB
JavaScript
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); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _warning = _interopRequireDefault(require("../_util/warning"));
var _configProvider = require("../config-provider");
require("./style");
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 _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
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; }
var noop = function noop() {};
var prefix = "adui-input";
var Textarea = (0, _react.forwardRef)(function (_ref, ref) {
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 = (0, _react.useState)(false),
_useState2 = _slicedToArray(_useState, 2),
focused = _useState2[0],
setFocused = _useState2[1];
var textareaRef = (0, _react.useRef)(null);
var _useContext = (0, _react.useContext)(_configProvider.ConfigContext),
sizeContext = _useContext.size;
var size = (0, _configProvider.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);
};
(0, _react.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: (0, _classnames["default"])("".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) {
(0, _warning["default"])(resize === "none", "Input.Textarea", "不允许同时使用 prop `limit` 与 prop `resize`");
if (value) {
length = countHanzi ? getFormatStrLeng(value) : value.length;
} else {
(0, _warning["default"])(value !== null, "Input.Textarea", "如果要限制字数,必须从外部控制 value。");
length = 0;
}
}
var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-wrapper"), "".concat(prefix, "-wrapper_textarea"), "".concat(prefix, "-").concat(size), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "-").concat(theme), theme), "".concat(prefix, "-resizable"), resize !== "none"), "".concat(prefix, "-disabled"), disabled), "".concat(prefix, "-limited"), !!limit), "".concat(prefix, "-normal"), intent === "normal"), "".concat(prefix, "-primary"), intent === "primary"), "".concat(prefix, "-success"), intent === "success"), "".concat(prefix, "-warning"), intent === "warning"), "".concat(prefix, "-danger"), intent === "danger" || length && limit && length > limit), "".concat(prefix, "-focused"), focused));
return _react["default"].createElement("div", _extends({
className: classSet
}, otherProps), _react["default"].createElement("textarea", textareaProps), !!limit && _react["default"].createElement("div", {
className: "".concat(prefix, "-limit")
}, _react["default"].createElement("span", null, "".concat(length, "/").concat(limit))));
});
Textarea.propTypes = {
autoFocus: _propTypes["default"].bool,
className: _propTypes["default"].string,
countHanzi: _propTypes["default"].bool,
defaultValue: _propTypes["default"].string,
disabled: _propTypes["default"].bool,
id: _propTypes["default"].string,
inputClassName: _propTypes["default"].string,
inputStyle: _propTypes["default"].object,
intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]),
limit: _propTypes["default"].number,
name: _propTypes["default"].string,
onBlur: _propTypes["default"].func,
onChange: _propTypes["default"].func,
onFocus: _propTypes["default"].func,
onKeyDown: _propTypes["default"].func,
onPressEnter: _propTypes["default"].func,
onScroll: _propTypes["default"].func,
placeholder: _propTypes["default"].string,
required: _propTypes["default"].bool,
resize: _propTypes["default"].oneOf(["none", "both", "horizontal", "vertical"]),
size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]),
theme: _propTypes["default"].oneOf([null, "light"]),
type: _propTypes["default"].string,
value: _propTypes["default"].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";
var _default = exports["default"] = Textarea;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX3dhcm5pbmciLCJfY29uZmlnUHJvdmlkZXIiLCJfZXhjbHVkZWQiLCJlIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImwiLCJpdGVyYXRvciIsImYiLCJuZXh0IiwiZG9uZSIsImlzQXJyYXkiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInMiLCJpbmNsdWRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwibm9vcCIsInByZWZpeCIsIlRleHRhcmVhIiwiZm9yd2FyZFJlZiIsIl9yZWYiLCJyZWYiLCJhdXRvRm9jdXMiLCJjbGFzc05hbWUiLCJjb3VudEhhbnppIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJpZCIsImlucHV0Q2xhc3NOYW1lIiwiaW5wdXRTdHlsZSIsImludGVudCIsImxpbWl0Iiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25LZXlEb3duIiwib25QcmVzc0VudGVyIiwib25TY3JvbGwiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicmVzaXplIiwic2l6ZVByb3AiLCJzaXplIiwidGhlbWUiLCJ0eXBlIiwib3RoZXJQcm9wcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImZvY3VzZWQiLCJzZXRGb2N1c2VkIiwidGV4dGFyZWFSZWYiLCJ1c2VSZWYiLCJfdXNlQ29udGV4dCIsInVzZUNvbnRleHQiLCJDb25maWdDb250ZXh0Iiwic2l6ZUNvbnRleHQiLCJnZXRDb21wdXRlZFNpemUiLCJoYW5kbGVDaGFuZ2UiLCJ2YWwiLCJ0YXJnZXQiLCJyZXBsYWNlIiwiaGFuZGxlS2V5RG93biIsImtleSIsImhhbmRsZUJsdXIiLCJoYW5kbGVGb2N1cyIsImZpeENvbnRyb2xsZWRWYWx1ZSIsImdldEZvcm1hdFN0ckxlbmciLCJzdHIiLCJsZW4iLCJyZWFsTGVuZ3RoIiwiY2hhckNvZGUiLCJjaGFyQ29kZUF0IiwiTWF0aCIsImNlaWwiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiaW5wdXQiLCJjdXJyZW50IiwidGV4dGFyZWFQcm9wcyIsImNsYXNzTmFtZXMiLCJjb25jYXQiLCJzdHlsZSIsIndhcm5pbmciLCJjbGFzc1NldCIsImNyZWF0ZUVsZW1lbnQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJib29sIiwic3RyaW5nIiwib2JqZWN0Iiwib25lT2YiLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwiZGlzcGxheU5hbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL2lucHV0L1RleHRhcmVhLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlQ29udGV4dCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IHdhcm5pbmcgZnJvbSBcIi4uL191dGlsL3dhcm5pbmdcIlxuaW1wb3J0IHsgQ29uZmlnQ29udGV4dCwgZ2V0Q29tcHV0ZWRTaXplIH0gZnJvbSBcIi4uL2NvbmZpZy1wcm92aWRlclwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1pbnB1dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRleHRhcmVhUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIGF1dG9Gb2N1c1xuICAgKi9cbiAgYXV0b0ZvY3VzPzogYm9vbGVhblxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOaYr+WQpuaMieeFp+S4gOS4quaxieWtl+eulyAyIOWtl+aVsOeahOaWueW8j+mZkOWItumVv+W6plxuICAgKi9cbiAgY291bnRIYW56aT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOm7mOiupOWAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOi+k+WFpeahhueahCBpZFxuICAgKi9cbiAgaWQ/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDnsbvlnotcbiAgICovXG4gIGludGVudD86IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE57G75ZCNXG4gICAqL1xuICBpbnB1dENsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5L2c55So5YiwIGlucHV0IOWFg+e0oOeahOagt+W8j1xuICAgKi9cbiAgaW5wdXRTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgLyoqXG4gICAqIOmZkOWItumVv+W6plxuICAgKi9cbiAgbGltaXQ/OiBudW1iZXIgfCBudWxsXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSBuYW1lXG4gICAqL1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICogYmx1ciDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25CbHVyPzogKGU6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIOWAvOaUueWPmOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZT86IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PiwgdmFsdWU/OiBzdHJpbmcpID0+IHZvaWRcbiAgLyoqXG4gICAqIGZvY3VzIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkZvY3VzPzogKGU6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIGtleWRvd24g5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uS2V5RG93bj86IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBlbnRlciDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25QcmVzc0VudGVyPzogKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIHNjcm9sbCDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25TY3JvbGw/OiAoZTogUmVhY3QuVUlFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICogcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSByZXF1aXJlZFxuICAgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHosIPmlbTlpKflsI9cbiAgICovXG4gIHJlc2l6ZT86IFwibm9uZVwiIHwgXCJib3RoXCIgfCBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIlxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplPzogXCJtaW5pXCIgfCBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiXG4gIC8qKlxuICAgKiDorr7nva7kuLvpophcbiAgICovXG4gIHRoZW1lPzogbnVsbCB8IFwibGlnaHRcIlxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gdHlwZVxuICAgKi9cbiAgdHlwZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOWAvCAtIOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU/OiBzdHJpbmcgfCBudWxsXG59XG5cbi8qKlxuICog6L6T5YWl5Yy65Z+f77yM55So5LqO5aSa6KGM57qv5paH5pys57yW6L6R44CCXG4gKi9cbmNvbnN0IFRleHRhcmVhOiBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICBJVGV4dGFyZWFQcm9wcyAmIFJlYWN0LlJlZkF0dHJpYnV0ZXM8YW55PlxuPiA9IGZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb3VudEhhbnppLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBpZCxcbiAgICAgIGlucHV0Q2xhc3NOYW1lLFxuICAgICAgaW5wdXRTdHlsZSxcbiAgICAgIGludGVudCxcbiAgICAgIGxpbWl0LFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uUHJlc3NFbnRlcixcbiAgICAgIG9uU2Nyb2xsLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHJlc2l6ZSxcbiAgICAgIHNpemU6IHNpemVQcm9wLFxuICAgICAgdGhlbWUsXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWUsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSVRleHRhcmVhUHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IFtmb2N1c2VkLCBzZXRGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gICAgY29uc3QgdGV4dGFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbClcblxuICAgIGNvbnN0IHsgc2l6ZTogc2l6ZUNvbnRleHQgfSA9IHVzZUNvbnRleHQoQ29uZmlnQ29udGV4dClcblxuICAgIGNvbnN0IHNpemUgPSBnZXRDb21wdXRlZFNpemUoc2l6ZVByb3AsIHNpemVDb250ZXh0KVxuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkICYmIG9uQ2hhbmdlKSB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRyb2wtcmVnZXgsIG1heC1sZW4gKi9cbiAgICAgICAgLy8gMDggQmFja3NwYWNlLCAwOSBUYWIsIDBCIOWeguebtOWItuihqOespiwgMEMg5o2i6aG1LCAwRCDlm57ovaYsIEEwIOS4jemXtOaWreepuuagvCxcbiAgICAgICAgLy8gMjAyOC8yMDI5IOWIhumalOespiwgRkVmZiDlrZfoioLpobrluo/moIforrDjgIJcbiAgICAgICAgY29uc3QgdmFsID0gZS50YXJnZXQudmFsdWUucmVwbGFjZShcbiAgICAgICAgICAvXFx1MDAwOHxcXHUwMDA5fFxcdTAwMEJ8XFx1MDAwQ3xcXHUwMDBEfFxcdTAwQTB8XFx1MjAyOHxcXHUyMDI5fFxcdUZFRkYvZyxcbiAgICAgICAgICBcIlwiXG4gICAgICAgIClcbiAgICAgICAgb25DaGFuZ2UoZSwgdmFsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgJiYgb25QcmVzc0VudGVyKSB7XG4gICAgICAgIG9uUHJlc3NFbnRlcihlKVxuICAgICAgfVxuICAgICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgICBvbktleURvd24oZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVCbHVyID0gKGU6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICAgIHNldEZvY3VzZWQoZmFsc2UpXG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cihlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKGU6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICAgIHNldEZvY3VzZWQodHJ1ZSlcbiAgICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICAgIG9uRm9jdXMoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaXhDb250cm9sbGVkVmFsdWUgPSAodmFsPzogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwidW5kZWZpbmVkXCIgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0Rm9ybWF0U3RyTGVuZyA9IChzdHI6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuICAgICAgbGV0IHJlYWxMZW5ndGggPSAwXG4gICAgICBsZXQgY2hhckNvZGUgPSAtMVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgICAgIGlmIChjaGFyQ29kZSA+PSAwICYmIGNoYXJDb2RlIDw9IDEyOCkge1xuICAgICAgICAgIHJlYWxMZW5ndGggKz0gMC41XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVhbExlbmd0aCArPSAxXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBNYXRoLmNlaWwocmVhbExlbmd0aClcbiAgICB9XG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgIGlucHV0OiB0ZXh0YXJlYVJlZj8uY3VycmVudCxcbiAgICAgIGhhbmRsZUNoYW5nZSxcbiAgICAgIGhhbmRsZUtleURvd24sXG4gICAgICBoYW5kbGVCbHVyLFxuICAgICAgaGFuZGxlRm9jdXMsXG4gICAgfSkpXG5cbiAgICBjb25zdCB0ZXh0YXJlYVByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGAke3ByZWZpeH0tYmFzZWAsIGlucHV0Q2xhc3NOYW1lKSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgb25TY3JvbGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlZjogdGV4dGFyZWFSZWYsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHN0eWxlOiB7IHJlc2l6ZSwgLi4uaW5wdXRTdHlsZSB9LFxuICAgICAgdHlwZSxcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRleHRhcmVhUHJvcHMudmFsdWUgPSBmaXhDb250cm9sbGVkVmFsdWUodmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRhcmVhUHJvcHMuZGVmYXVsdFZhbHVlID0gZml4Q29udHJvbGxlZFZhbHVlKGRlZmF1bHRWYWx1ZSlcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoXG4gICAgaWYgKGxpbWl0KSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICByZXNpemUgPT09IFwibm9uZVwiLFxuICAgICAgICBcIklucHV0LlRleHRhcmVhXCIsXG4gICAgICAgIFwi5LiN5YWB6K645ZCM5pe25L2/55SoIHByb3AgYGxpbWl0YCDkuI4gcHJvcCBgcmVzaXplYFwiXG4gICAgICApXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgbGVuZ3RoID0gY291bnRIYW56aSA/IGdldEZvcm1hdFN0ckxlbmcodmFsdWUpIDogdmFsdWUubGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgIHZhbHVlICE9PSBudWxsLFxuICAgICAgICAgIFwiSW5wdXQuVGV4dGFyZWFcIixcbiAgICAgICAgICBcIuWmguaenOimgemZkOWItuWtl+aVsO+8jOW/hemhu+S7juWklumDqOaOp+WItiB2YWx1ZeOAglwiXG4gICAgICAgIClcbiAgICAgICAgbGVuZ3RoID0gMFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzU2V0ID0gY2xhc3NOYW1lcyhcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGAke3ByZWZpeH0td3JhcHBlcmAsXG4gICAgICBgJHtwcmVmaXh9LXdyYXBwZXJfdGV4dGFyZWFgLFxuICAgICAgYCR7cHJlZml4fS0ke3NpemV9YCxcbiAgICAgIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tJHt0aGVtZX1gXTogdGhlbWUsXG4gICAgICAgIFtgJHtwcmVmaXh9LXJlc2l6YWJsZWBdOiByZXNpemUgIT09IFwibm9uZVwiLFxuICAgICAgICBbYCR7cHJlZml4fS1kaXNhYmxlZGBdOiBkaXNhYmxlZCxcbiAgICAgICAgW2Ake3ByZWZpeH0tbGltaXRlZGBdOiAhIWxpbWl0LFxuICAgICAgICBbYCR7cHJlZml4fS1ub3JtYWxgXTogaW50ZW50ID09PSBcIm5vcm1hbFwiLFxuICAgICAgICBbYCR7cHJlZml4fS1wcmltYXJ5YF06IGludGVudCA9PT0gXCJwcmltYXJ5XCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LXN1Y2Nlc3NgXTogaW50ZW50ID09PSBcInN1Y2Nlc3NcIixcbiAgICAgICAgW2Ake3ByZWZpeH0td2FybmluZ2BdOiBpbnRlbnQgPT09IFwid2FybmluZ1wiLFxuICAgICAgICBbYCR7cHJlZml4fS1kYW5nZXJgXTpcbiAgICAgICAgICBpbnRlbnQgPT09IFwiZGFuZ2VyXCIgfHwgKGxlbmd0aCAmJiBsaW1pdCAmJiBsZW5ndGggPiBsaW1pdCksXG4gICAgICAgIFtgJHtwcmVmaXh9LWZvY3VzZWRgXTogZm9jdXNlZCxcbiAgICAgIH1cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzU2V0fSB7Li4ub3RoZXJQcm9wc30+XG4gICAgICAgIDx0ZXh0YXJlYSB7Li4udGV4dGFyZWFQcm9wc30gLz5cbiAgICAgICAgeyEhbGltaXQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWxpbWl0YH0+XG4gICAgICAgICAgICA8c3Bhbj57YCR7bGVuZ3RofS8ke2xpbWl0fWB9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG4pXG5cblRleHRhcmVhLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIGF1dG9Gb2N1c1xuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5oyJ54Wn5LiA5Liq5rGJ5a2X566XIDIg5a2X5pWw55qE5pa55byP6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBjb3VudEhhbnppOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOm7mOiupOWAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDovpPlhaXmoYbnmoQgaWRcbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5L2c55So5YiwIGlucHV0IOWFg+e0oOeahOexu+WQjVxuICAgKi9cbiAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE5qC35byPXG4gICAqL1xuICBpbnB1dFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog6K6+572u57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgXCJub3JtYWxcIixcbiAgICBcInByaW1hcnlcIixcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcIndhcm5pbmdcIixcbiAgICBcImRhbmdlclwiLFxuICBdKSxcbiAgLyoqXG4gICAqIOmZkOWItumVv+W6plxuICAgKi9cbiAgbGltaXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiB0ZXh0YXJlYSDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSBuYW1lXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogYmx1ciDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWAvOaUueWPmOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBmb2N1cyDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBrZXlkb3duIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogZW50ZXIg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uUHJlc3NFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBzY3JvbGwg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uU2Nyb2xsOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIHBsYWNlaG9sZGVyXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIHJlcXVpcmVkXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHosIPmlbTlpKflsI9cbiAgICovXG4gIHJlc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJib3RoXCIsIFwiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCJdKSxcbiAgLyoqXG4gICAqIOiuvue9ruWwuuWvuFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm1pbmlcIiwgXCJzbWFsbFwiLCBcIm1lZGl1bVwiLCBcImxhcmdlXCJdKSxcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZihbbnVsbCwgXCJsaWdodFwiXSksXG4gIC8qKlxuICAgKiB0ZXh0YXJlYSDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSB0eXBlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbn1cblxuVGV4dGFyZWEuZGVmYXVsdFByb3BzID0ge1xuICBhdXRvRm9jdXM6IGZhbHNlLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgY291bnRIYW56aTogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGlkOiBudWxsLFxuICBpbnB1dENsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBpbnB1dFN0eWxlOiB7fSxcbiAgaW50ZW50OiBcIm5vcm1hbFwiLFxuICBsaW1pdDogbnVsbCxcbiAgbmFtZTogbnVsbCxcbiAgb25CbHVyOiBub29wLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgb25Gb2N1czogbm9vcCxcbiAgb25LZXlEb3duOiBub29wLFxuICBvblByZXNzRW50ZXI6IG5vb3AsXG4gIG9uU2Nyb2xsOiBub29wLFxuICBwbGFjZWhvbGRlcjogXCLor7fovpPlhaVcIixcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICByZXNpemU6IFwibm9uZVwiLFxuICBzaXplOiBcInNtYWxsXCIsXG4gIHRoZW1lOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcbn1cblxuVGV4dGFyZWEuZGlzcGxheU5hbWUgPSBcIlRleHRhcmVhXCJcblxuZXhwb3J0IGRlZmF1bHQgVGV4dGFyZWFcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU9BLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUwsT0FBQTtBQUNBQSxPQUFBO0FBQWdCLElBQUFNLFNBQUE7QUFBQSxTQUFBSix1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUseUJBQUFGLENBQUEsNkJBQUFHLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUQsd0JBQUEsWUFBQUEseUJBQUFGLENBQUEsV0FBQUEsQ0FBQSxHQUFBSyxDQUFBLEdBQUFELENBQUEsS0FBQUosQ0FBQTtBQUFBLFNBQUFSLHdCQUFBUSxDQUFBLEVBQUFJLENBQUEsU0FBQUEsQ0FBQSxJQUFBSixDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxTQUFBRCxDQUFBLGVBQUFBLENBQUEsZ0JBQUFNLE9BQUEsQ0FBQU4sQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBSyxDQUFBLEdBQUFILHdCQUFBLENBQUFFLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFFLEdBQUEsQ0FBQVAsQ0FBQSxVQUFBSyxDQUFBLENBQUFHLEdBQUEsQ0FBQVIsQ0FBQSxPQUFBUyxD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
;