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>

212 lines 30.4 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 = ["action", "className", "closable", "content", "duration", "getContainer", "icon", "intent", "onClose"], _excluded2 = ["onClose", "getContainer", "intent"]; 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 _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 _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 _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, { forwardRef, useEffect, useImperativeHandle, useRef } from "react"; import * as ReactDOM from "react-dom"; import PropTypes from "prop-types"; import classNames from "classnames"; import Button from "../button"; import Icon from "../icon"; import ICON_INTENTS from "../alert/iconIntents"; import "./style"; var prefix = "adui-message"; var INTENTS = ["normal", "primary", "success", "warning", "danger"]; var Message = forwardRef(function (_ref, ref) { var action = _ref.action, className = _ref.className, closable = _ref.closable, content = _ref.content, duration = _ref.duration, getContainer = _ref.getContainer, icon = _ref.icon, intent = _ref.intent, onClose = _ref.onClose, otherProps = _objectWithoutProperties(_ref, _excluded); var messageRef = useRef(null); var timer; var clearCloseTimer = function clearCloseTimer() { if (timer) { clearTimeout(timer); timer = null; } }; var close = function close() { if (messageRef && messageRef.current) { messageRef.current.style.opacity = "0"; messageRef.current.style.visibility = "hidden"; messageRef.current.style.transform = "translate3d(-50%, -56px, 0)"; messageRef.current.style.transition = "all var(--adui-motion-duration-base) var(--adui-motion-ease-base)"; } clearCloseTimer(); if (onClose) { onClose(); } }; var setCloseTimer = function setCloseTimer() { if (duration) { timer = setTimeout(function () { close(); }, duration * 1000); } }; useEffect(function () { setCloseTimer(); return clearCloseTimer; }, []); useImperativeHandle(ref, function () { return { close: close, getDomNode: function getDomNode() { return messageRef.current; } }; }); var hasActions = action || closable; return React.createElement("div", _extends({ className: classNames(className, "".concat(prefix, "-base"), "".concat(prefix, "-").concat(intent), _defineProperty({}, "".concat(prefix, "-hasActions"), hasActions)), onMouseEnter: clearCloseTimer, onMouseLeave: setCloseTimer, ref: messageRef, "data-duration": duration }, otherProps), React.createElement(Icon, { icon: icon || ICON_INTENTS[intent], size: 20, className: "".concat(prefix, "-icon") }), React.createElement("div", { className: "".concat(prefix, "-content") }, content), hasActions && React.createElement("div", { className: "".concat(prefix, "-actions") }, action && React.createElement("div", { className: "".concat(prefix, "-action") }, React.createElement(Button, { theme: "light", onClick: function onClick() { var onClick = action.onClick; if (onClick) { onClick(); } } }, action.text)), closable && React.createElement(Button, { leftIcon: "cancel", theme: "light", onClick: close }))); }); Message.displayName = "Message"; Message.propTypes = { action: PropTypes.any, className: PropTypes.string, closable: PropTypes.bool, content: PropTypes.node, duration: PropTypes.number, getContainer: PropTypes.func, icon: PropTypes.any, intent: PropTypes.any, onClose: PropTypes.func }; Message.defaultProps = { action: null, className: undefined, closable: false, content: null, duration: 2, getContainer: undefined, icon: undefined, intent: "normal", onClose: null }; var newInstance = function newInstance(props) { var instances = Array.from(document.getElementsByClassName("".concat(prefix, "-wrapper"))); instances = instances.filter(function (o) { return o.dataset.close !== "true"; }); if (instances && instances.length > 2) { var firstInstance = instances[0]; var firstChild = firstInstance.children[0]; if (firstChild.dataset.duration !== "0") { firstInstance.dataset.close = "true"; firstInstance.style.transform = "translate3d(0, -56px, 0)"; firstChild.style.opacity = "0"; firstChild.style.visibility = "hidden"; firstInstance.style.transition = "all var(--adui-motion-duration-base) var(--adui-motion-ease-base)"; firstChild.style.transition = "all var(--adui-motion-duration-base) var(--adui-motion-ease-base)"; } } var instance; var onClose = props.onClose, getContainer = props.getContainer, intent = props.intent, otherProps = _objectWithoutProperties(props, _excluded2); var container = document.createElement("div"); container.className = "".concat(prefix, "-wrapper"); container.dataset.intent = intent; if (getContainer) { getContainer().appendChild(container); } else { document.body.appendChild(container); } var updateStyles = function updateStyles() { setTimeout(function () { var messages = Array.from(document.getElementsByClassName("".concat(prefix, "-wrapper"))); messages.forEach(function (message, index) { message.style.opacity = "1"; message.style.transform = "translate3d(0, ".concat(56 * (messages.length - 1 - index), "px, 0)"); }); }, 50); }; updateStyles(); var close = function close() { if (onClose) { onClose(); } setTimeout(function () { var unmountResult = ReactDOM.unmountComponentAtNode(container); if (unmountResult && container.parentNode) { container.parentNode.removeChild(container); updateStyles(); } }, 300); }; ReactDOM.render(React.createElement(Message, _extends({ ref: function ref(message) { instance = message; }, onClose: close, intent: intent }, otherProps)), container); return { destroy: function destroy() { if (instance) { instance.close(); } } }; }; INTENTS.forEach(function (intent) { Message[intent] = function (config) { var cnfg = { intent: intent }; if (typeof config === "string") { cnfg = { content: config, intent: intent }; } else { cnfg = config; } return newInstance(_objectSpread(_objectSpread({}, cnfg), {}, { intent: intent })); }; }); export default Message; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlUmVmIiwiUmVhY3RET00iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiQnV0dG9uIiwiSWNvbiIsIklDT05fSU5URU5UUyIsInByZWZpeCIsIklOVEVOVFMiLCJNZXNzYWdlIiwiX3JlZiIsInJlZiIsImFjdGlvbiIsImNsYXNzTmFtZSIsImNsb3NhYmxlIiwiY29udGVudCIsImR1cmF0aW9uIiwiZ2V0Q29udGFpbmVyIiwiaWNvbiIsImludGVudCIsIm9uQ2xvc2UiLCJvdGhlclByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwibWVzc2FnZVJlZiIsInRpbWVyIiwiY2xlYXJDbG9zZVRpbWVyIiwiY2xlYXJUaW1lb3V0IiwiY2xvc2UiLCJjdXJyZW50Iiwic3R5bGUiLCJvcGFjaXR5IiwidmlzaWJpbGl0eSIsInRyYW5zZm9ybSIsInRyYW5zaXRpb24iLCJzZXRDbG9zZVRpbWVyIiwic2V0VGltZW91dCIsImdldERvbU5vZGUiLCJoYXNBY3Rpb25zIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzIiwiY29uY2F0IiwiX2RlZmluZVByb3BlcnR5Iiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwic2l6ZSIsInRoZW1lIiwib25DbGljayIsInRleHQiLCJsZWZ0SWNvbiIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIiwiYm9vbCIsIm5vZGUiLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwibmV3SW5zdGFuY2UiLCJwcm9wcyIsImluc3RhbmNlcyIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZpbHRlciIsIm8iLCJkYXRhc2V0IiwibGVuZ3RoIiwiZmlyc3RJbnN0YW5jZSIsImZpcnN0Q2hpbGQiLCJjaGlsZHJlbiIsImluc3RhbmNlIiwiX2V4Y2x1ZGVkMiIsImNvbnRhaW5lciIsImFwcGVuZENoaWxkIiwiYm9keSIsInVwZGF0ZVN0eWxlcyIsIm1lc3NhZ2VzIiwiZm9yRWFjaCIsIm1lc3NhZ2UiLCJpbmRleCIsInVubW91bnRSZXN1bHQiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVuZGVyIiwiZGVzdHJveSIsImNvbmZpZyIsImNuZmciLCJfb2JqZWN0U3ByZWFkIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlL01lc3NhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi9idXR0b25cIlxuaW1wb3J0IEljb24sIHsgSWNvbk5hbWVzIH0gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IElDT05fSU5URU5UUyBmcm9tIFwiLi4vYWxlcnQvaWNvbkludGVudHNcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1tZXNzYWdlXCJcbmNvbnN0IElOVEVOVFMgPSBbXCJub3JtYWxcIiwgXCJwcmltYXJ5XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDooYzliqjmjInpkq7nmoTphY3nva7vvIzlpoLvvJphY3Rpb246IHsgdGV4dDogXCLop6PplIFcIiwgb25DbGljazogKCkgPT4geyBtZXNzYWdlLmRlc3Ryb3koKSB9IH1cbiAgICovXG4gIGFjdGlvbj86IHsgdGV4dDogc3RyaW5nOyBvbkNsaWNrOiAoKSA9PiB2b2lkIH0gfCBudWxsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5pi+56S65YWz6ZetIEljb27vvIzlpoLmnpzpnIDopoHlj6rmlK/mjIHmiYvliqjlhbPpl63vvIzov5jpnIDopoHkvKDlhaUgZHVyYXRpb246IDBcbiAgICovXG4gIGNsb3NhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog5YaF5a65XG4gICAqL1xuICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDpl7TpmpTlpJrkuYXoh6rliqjlhbPpl63vvIzljZXkvY3kuLogc++8jOWmguaenOS8oOWFpSAw77yM5YiZ6KGo56S65LiN5Lya6Ieq5Yqo5raI5aSxXG4gICAqL1xuICBkdXJhdGlvbj86IG51bWJlclxuICAvKipcbiAgICogTWVzc2FnZSDmj5LlhaXliLDlk6rkuKrlhYPntKDvvIzpu5jorqQgKCkgPT4gZG9jdW1lbnQuYm9keVxuICAgKi9cbiAgZ2V0Q29udGFpbmVyPzogKCkgPT4gSFRNTEVsZW1lbnRcbiAgLyoqXG4gICAqIOiuvue9ruWbvuagh1xuICAgKi9cbiAgaWNvbj86IEljb25OYW1lc1xuICAvKipcbiAgICog6K6+572u57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiXG4gIC8qKlxuICAgKiDlhbPpl63ml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DbG9zZT86ICgoKSA9PiB2b2lkKSB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVxuICBleHRlbmRzIFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gICAgSU1lc3NhZ2VQcm9wcyAmIFJlYWN0LlJlZkF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+XG4gID4ge1xuICBub3JtYWw6IGFueVxuICBwcmltYXJ5OiBhbnlcbiAgc3VjY2VzczogYW55XG4gIHdhcm5pbmc6IGFueVxuICBkYW5nZXI6IGFueVxufVxuXG4vKipcbiAqIOWFqOWxgOaPkOmGkueUqOS6juWFqOWxgOaAp+WcsOWxleekuumcgOimgeWNs+aXtuaAp+WFs+azqOeahOS/oeaBr+OAglxuICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBNZXNzYWdlOiBJTWVzc2FnZSA9IGZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zYWJsZSxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGdldENvbnRhaW5lcixcbiAgICAgIGljb24sXG4gICAgICBpbnRlbnQsXG4gICAgICBvbkNsb3NlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElNZXNzYWdlUHJvcHMsXG4gICAgcmVmOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICAgIGxldCB0aW1lcjogbnVsbCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+XG5cbiAgICBjb25zdCBjbGVhckNsb3NlVGltZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICB0aW1lciA9IG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlUmVmICYmIG1lc3NhZ2VSZWYuY3VycmVudCkge1xuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUub3BhY2l0eSA9IFwiMFwiXG4gICAgICAgIG1lc3NhZ2VSZWYuY3VycmVudC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZCgtNTAlLCAtNTZweCwgMClcIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgICAgXCJhbGwgdmFyKC0tYWR1aS1tb3Rpb24tZHVyYXRpb24tYmFzZSkgdmFyKC0tYWR1aS1tb3Rpb24tZWFzZS1iYXNlKVwiXG4gICAgICB9XG4gICAgICBjbGVhckNsb3NlVGltZXIoKVxuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0Q2xvc2VUaW1lciA9ICgpID0+IHtcbiAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgfSwgZHVyYXRpb24gKiAxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDbG9zZVRpbWVyKClcbiAgICAgIHJldHVybiBjbGVhckNsb3NlVGltZXJcbiAgICB9LCBbXSlcblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgY2xvc2UsXG4gICAgICBnZXREb21Ob2RlOiAoKSA9PiBtZXNzYWdlUmVmLmN1cnJlbnQsXG4gICAgfSkpXG5cbiAgICBjb25zdCBoYXNBY3Rpb25zID0gYWN0aW9uIHx8IGNsb3NhYmxlXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIGAke3ByZWZpeH0tYmFzZWAsXG4gICAgICAgICAgYCR7cHJlZml4fS0ke2ludGVudH1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtgJHtwcmVmaXh9LWhhc0FjdGlvbnNgXTogaGFzQWN0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICAgIG9uTW91c2VFbnRlcj17Y2xlYXJDbG9zZVRpbWVyfVxuICAgICAgICBvbk1vdXNlTGVhdmU9e3NldENsb3NlVGltZXJ9XG4gICAgICAgIHJlZj17bWVzc2FnZVJlZn1cbiAgICAgICAgZGF0YS1kdXJhdGlvbj17ZHVyYXRpb259XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgPlxuICAgICAgICA8SWNvblxuICAgICAgICAgIGljb249e2ljb24gfHwgSUNPTl9JTlRFTlRTW2ludGVudF19XG4gICAgICAgICAgc2l6ZT17MjB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25gfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1jb250ZW50YH0+e2NvbnRlbnR9PC9kaXY+XG4gICAgICAgIHtoYXNBY3Rpb25zICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1hY3Rpb25zYH0+XG4gICAgICAgICAgICB7YWN0aW9uICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tYWN0aW9uYH0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgb25DbGljayB9ID0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2FjdGlvbi50ZXh0fVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uIGxlZnRJY29uPVwiY2FuY2VsXCIgdGhlbWU9XCJsaWdodFwiIG9uQ2xpY2s9e2Nsb3NlfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuKVxuXG5NZXNzYWdlLmRpc3BsYXlOYW1lID0gXCJNZXNzYWdlXCJcblxuTWVzc2FnZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDooYzliqjmjInpkq7nmoTphY3nva7vvIzlpoLvvJphY3Rpb246IHsgdGV4dDogXCLop6PplIFcIiwgb25DbGljazogKCkgPT4geyBtZXNzYWdlLmRlc3Ryb3koKSB9IH1cbiAgICovXG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5pi+56S65YWz6ZetIEljb27vvIzlpoLmnpzpnIDopoHlj6rmlK/mjIHmiYvliqjlhbPpl63vvIzov5jpnIDopoHkvKDlhaUgZHVyYXRpb246IDBcbiAgICovXG4gIGNsb3NhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWGheWuuVxuICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiDpl7TpmpTlpJrkuYXoh6rliqjlhbPpl63vvIzljZXkvY3kuLogc++8jOWmguaenOS8oOWFpSAw77yM5YiZ6KGo56S65LiN5Lya6Ieq5Yqo5raI5aSxXG4gICAqL1xuICBkdXJhdGlvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIE1lc3NhZ2Ug5o+S5YWl5Yiw5ZOq5Liq5YWD57Sg77yM6buY6K6kICgpID0+IGRvY3VtZW50LmJvZHlcbiAgICovXG4gIGdldENvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDorr7nva7lm77moIdcbiAgICovXG4gIGljb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWFs+mXreaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuTWVzc2FnZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGlvbjogbnVsbCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGNsb3NhYmxlOiBmYWxzZSxcbiAgY29udGVudDogbnVsbCxcbiAgZHVyYXRpb246IDIsXG4gIGdldENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBpY29uOiB1bmRlZmluZWQsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgb25DbG9zZTogbnVsbCxcbn1cblxuY29uc3QgbmV3SW5zdGFuY2UgPSAocHJvcHM6IElNZXNzYWdlUHJvcHMpID0+IHtcbiAgbGV0IGluc3RhbmNlcyA9IEFycmF5LmZyb20oXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LXdyYXBwZXJgKVxuICApXG4gIGluc3RhbmNlcyA9IGluc3RhbmNlcy5maWx0ZXIoXG4gICAgKG86IEhUTUxEaXZFbGVtZW50KSA9PiBvLmRhdGFzZXQuY2xvc2UgIT09IFwidHJ1ZVwiXG4gIClcbiAgaWYgKGluc3RhbmNlcyAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMikge1xuICAgIGNvbnN0IGZpcnN0SW5zdGFuY2UgPSBpbnN0YW5jZXNbMF0gYXMgSFRNTEVsZW1lbnRcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZmlyc3RJbnN0YW5jZS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudFxuICAgIGlmIChmaXJzdENoaWxkLmRhdGFzZXQuZHVyYXRpb24gIT09IFwiMFwiKSB7XG4gICAgICBmaXJzdEluc3RhbmNlLmRhdGFzZXQuY2xvc2UgPSBcInRydWVcIlxuICAgICAgZmlyc3RJbnN0YW5jZS5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKDAsIC01NnB4LCAwKVwiXG4gICAgICBmaXJzdENoaWxkLnN0eWxlLm9wYWNpdHkgPSBcIjBcIlxuICAgICAgZmlyc3RDaGlsZC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuXG4gICAgICBmaXJzdEluc3RhbmNlLnN0eWxlLnRyYW5zaXRpb24gPVxuICAgICAgICBcImFsbCB2YXIoLS1hZHVpLW1vdGlvbi1kdXJhdGlvbi1iYXNlKSB2YXIoLS1hZHVpLW1vdGlvbi1lYXNlLWJhc2UpXCJcbiAgICAgIGZpcnN0Q2hpbGQuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgIFwiYWxsIHZhcigtLWFkdWktbW90aW9uLWR1cmF0aW9uLWJhc2UpIHZhcigtLWFkdWktbW90aW9uLWVhc2UtYmFzZSlcIlxuICAgIH1cbiAgfVxuXG4gIGxldCBpbnN0YW5jZTogYW55XG5cbiAgY29uc3QgeyBvbkNsb3NlLCBnZXRDb250YWluZXIsIGludGVudCwgLi4ub3RoZXJQcm9wcyB9ID0gcHJvcHNcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBjb250YWluZXIuY2xhc3NOYW1lID0gYCR7cHJlZml4fS13cmFwcGVyYFxuICBjb250YWluZXIuZGF0YXNldC5pbnRlbnQgPSBpbnRlbnRcbiAgaWYgKGdldENvbnRhaW5lcikge1xuICAgIGdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVN0eWxlcyA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LXdyYXBwZXJgKVxuICAgICAgKSBhcyBIVE1MRGl2RWxlbWVudFtdXG4gICAgICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBpZiAoW1wid2FybmluZ1wiLCBcImRhbmdlclwiXS5pbmNsdWRlcyhtZXNzYWdlLmRhdGFzZXQuaW50ZW50IHx8IFwiXCIpKSB7XG4gICAgICAgIC8vICAgbWVzc2FnZS5zdHlsZS50cmFuc2l0aW9uID1cbiAgICAgICAgLy8gICAgIFwiYWxsIHZhcigtLWFkdWktbW90aW9uLWR1cmF0aW9uLWJvdW5jZSkgdmFyKC0tYWR1aS1tb3Rpb24tZWFzZS1ib3VuY2UpXCJcbiAgICAgICAgLy8gfVxuICAgICAgICBtZXNzYWdlLnN0eWxlLm9wYWNpdHkgPSBcIjFcIlxuICAgICAgICBtZXNzYWdlLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAke1xuICAgICAgICAgIDU2ICogKG1lc3NhZ2VzLmxlbmd0aCAtIDEgLSBpbmRleClcbiAgICAgICAgfXB4LCAwKWBcbiAgICAgIH0pXG4gICAgfSwgNTApXG4gIH1cblxuICB1cGRhdGVTdHlsZXMoKVxuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB1bm1vdW50UmVzdWx0ID0gUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpXG4gICAgICBpZiAodW5tb3VudFJlc3VsdCAmJiBjb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpXG4gICAgICAgIHVwZGF0ZVN0eWxlcygpXG4gICAgICB9XG4gICAgfSwgMzAwKVxuICB9XG5cbiAgUmVhY3RET00ucmVuZGVyKFxuICAgIDxNZXNzYWdlXG4gICAgICByZWY9eyhtZXNzYWdlKSA9PiB7XG4gICAgICAgIGluc3RhbmNlID0gbWVzc2FnZVxuICAgICAgfX1cbiAgICAgIG9uQ2xvc2U9e2Nsb3NlfVxuICAgICAgaW50ZW50PXtpbnRlbnR9XG4gICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAvPixcbiAgICBjb250YWluZXJcbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLmNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbklOVEVOVFMuZm9yRWFjaChcbiAgKGludGVudDogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCIpID0+IHtcbiAgICBNZXNzYWdlW2ludGVudF0gPSAoY29uZmlnOiBJTWVzc2FnZVByb3BzIHwgc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgY25mZyA9IHsgaW50ZW50IH0gYXMgSU1lc3NhZ2VQcm9wc1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY25mZyA9IHsgY29udGVudDogY29uZmlnLCBpbnRlbnQgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY25mZyA9IGNvbmZpZ1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld0luc3RhbmNlKHtcbiAgICAgICAgLi4uY25mZyxcbiAgICAgICAgaW50ZW50LFxuICAgICAgfSlcbiAgICB9XG4gIH1cbilcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtBQUssSUFDVkMsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLG1CQUFtQixFQUNuQkMsTUFBTSxRQUNELE9BQU87QUFDZCxPQUFPLEtBQUtDLFFBQVEsTUFBTSxXQUFXO0FBQ3JDLE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU9DLFVBQVUsTUFBTSxZQUFZO0FBQ25DLE9BQU9DLE1BQU0sTUFBTSxXQUFXO0FBQzlCLE9BQU9DLElBQUksTUFBcUIsU0FBUztBQUN6QyxPQUFPQyxZQUFZLE1BQU0sc0JBQXNCO0FBQy9DLE9BQU8sU0FBUztBQUVoQixJQUFNQyxNQUFNLEdBQUcsY0FBYztBQUM3QixJQUFNQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO0FBeURyRSxJQUFNQyxPQUFpQixHQUFHWixVQUFVLENBQ2xDLFVBQUFhLElBQUEsRUFhRUMsR0FBUSxFQUNMO0VBQUEsSUFaREMsTUFBTSxHQUFBRixJQUFBLENBQU5FLE1BQU07SUFDTkMsU0FBUyxHQUFBSCxJQUFBLENBQVRHLFNBQVM7SUFDVEMsUUFBUSxHQUFBSixJQUFBLENBQVJJLFFBQVE7SUFDUkMsT0FBTyxHQUFBTCxJQUFBLENBQVBLLE9BQU87SUFDUEMsUUFBUSxHQUFBTixJQUFBLENBQVJNLFFBQVE7SUFDUkMsWUFBWSxHQUFBUCxJQUFBLENBQVpPLFlBQVk7SUFDWkMsSUFBSSxHQUFBUixJQUFBLENBQUpRLElBQUk7SUFDSkMsTUFBTSxHQUFBVCxJQUFBLENBQU5TLE1BQU07SUFDTkMsT0FBTyxHQUFBVixJQUFBLENBQVBVLE9BQU87SUFDSkMsVUFBVSxHQUFBQyx3QkFBQSxDQUFBWixJQUFBLEVBQUFhLFNBQUE7RUFJZixJQUFNQyxVQUFVLEdBQUd4QixNQUFNLENBQWlCLElBQUksQ0FBQztFQUUvQyxJQUFJeUIsS0FBMkM7RUFFL0MsSUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFBLEVBQVM7SUFDNUIsSUFBSUQsS0FBSyxFQUFFO01BQ1RFLFlBQVksQ0FBQ0YsS0FBSyxDQUFDO01BQ25CQSxLQUFLLEdBQUcsSUFBSTtJQUNkO0VBQ0YsQ0FBQztFQUVELElBQU1HLEtBQUssR0FBRyxTQUFSQSxLQUFLQSxDQUFBLEVBQVM7SUFDbEIsSUFBSUosVUFBVSxJQUFJQSxVQUFVLENBQUNLLE9BQU8sRUFBRTtNQUNwQ0wsVUFBVSxDQUFDSyxPQUFPLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxHQUFHLEdBQUc7TUFDdENQLFVBQVUsQ0FBQ0ssT0FBTyxDQUFDQyxLQUFLLENBQUNFLFVBQVUsR0FBRyxRQUFRO01BQzlDUixVQUFVLENBQUNLLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDRyxTQUFTLEdBQUcsNkJBQTZCO01BQ2xFVCxVQUFVLENBQUNLLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDSSxVQUFVLEdBQ2pDLG1FQUFtRTtJQUN2RTtJQUNBUixlQUFlLENBQUMsQ0FBQztJQUNqQixJQUFJTixPQUFPLEVBQUU7TUFDWEEsT0FBTyxDQUFDLENBQUM7SUFDWDtFQUNGLENBQUM7RUFFRCxJQUFNZSxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUEsRUFBUztJQUMxQixJQUFJbkIsUUFBUSxFQUFFO01BQ1pTLEtBQUssR0FBR1csVUFBVSxDQUFDLFlBQU07UUFDdkJSLEtBQUssQ0FBQyxDQUFDO01BQ1QsQ0FBQyxFQUFFWixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3JCO0VBQ0YsQ0FBQztFQUVEbEIsU0FBUyxDQUFDLFlBQU07SUFDZHFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2YsT0FBT1QsZUFBZTtFQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4zQixtQkFBbUIsQ0FBQ1ksR0FBRyxFQUFFO0lBQUEsT0FBTztNQUM5QmlCLEtBQUssRUFBTEEsS0FBSztNQUNMUyxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQTtRQUFBLE9BQVFiLFVBQVUsQ0FBQ0ssT0FBTztNQUFBO0lBQ3RDLENBQUM7RUFBQSxDQUFDLENBQUM7RUFFSCxJQUFNUyxVQUFVLEdBQUcxQixNQUFNLElBQUlFLFFBQVE7RUFFckMsT0FDRWxCLEtBQUEsQ0FBQTJDLGFBQUEsUUFBQUMsUUFBQTtJQUNFM0IsU0FBUyxFQUFFVixVQUFVLENBQ25CVSxTQUFTLEtBQUE0QixNQUFBLENBQ05sQyxNQUFNLGVBQUFrQyxNQUFBLENBQ05sQyxNQUFNLE9BQUFrQyxNQUFBLENBQUl0QixNQUFNLEdBQUF1QixlQUFBLFFBQUFELE1BQUEsQ0FFYmxDLE1BQU0sa0JBQWdCK0IsVUFBVSxDQUV4QyxDQUFFO0lBQ0ZLLFlBQVksRUFBRWpCLGVBQWdCO0lBQzlCa0IsWUFBWSxFQUFFVCxhQUFjO0lBQzVCeEIsR0FBRyxFQUFFYSxVQUFXO0lBQ2hCLGlCQUFlUjtFQUFTLEdBQ3BCSyxVQUFVLEdBRWR6QixLQUFBLENBQUEyQyxhQUFBLENBQUNsQyxJQUFJO0lBQ0hhLElBQUksRUFBRUEsSUFBSSxJQUFJWixZQUFZLENBQUNhLE1BQU0sQ0FBRTtJQUNuQzBCLElBQUksRUFBRSxFQUFHO0lBQ1RoQyxTQUFTLEtBQUE0QixNQUFBLENBQUtsQyxNQUFNO0VBQVEsQ0FDN0IsQ0FBQyxFQUNGWCxLQUFBLENBQUEyQyxhQUFBO0lBQUsxQixTQUFTLEtBQUE0QixNQUFBLENBQUtsQyxNQUFNO0VBQVcsR0FBRVEsT0FBYSxDQUFDLEVBQ25EdUIsVUFBVSxJQUNUMUMsS0FBQSxDQUFBMkMsYUFBQTtJQUFLMUIsU0FBUyxLQUFBNEIsTUFBQSxDQUFLbEMsTUFBTTtFQUFXLEdBQ2pDSyxNQUFNLElBQ0xoQixLQUFBLENBQUEyQyxhQUFBO0lBQUsxQixTQUFTLEtBQUE0QixNQUFBLENBQUtsQyxNQUFNO0VBQVUsR0FDakNYLEtBQUEsQ0FBQTJDLGFBQUEsQ0FBQ25DLE1BQU07SUFDTDBDLEtBQUssRUFBQyxPQUFPO0lBQ2JDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQVE7TUFDYixJQUFRQSxPQUFPLEdBQUtuQyxNQUFNLENBQWxCbUMsT0FBTztNQUNmLElBQUlBLE9BQU8sRUFBRTtRQUNYQSxPQUFPLENBQUMsQ0FBQztNQUNYO0lBQ0Y7RUFBRSxHQUVEbkMsTUFBTSxDQUFDb0MsSUFDRixDQUNMLENBQ04sRUFDQWxDLFFBQVEsSUFDUGxCLEtBQUEsQ0FBQTJDLGFBQUEsQ0FBQ25DLE1BQU07SUFBQzZDLFFBQVEsRUFBQyxRQUFRO0lBQUNILEtBQUssRUFBQyxPQUFPO0lBQUNDLE9BQU8sRUFBRW5CO0VBQU0sQ0FBRSxDQUV4RCxDQUVKLENBQUM7QUFFVixDQUNGLENBQUM7QUFFRG5CLE9BQU8sQ0FBQ3lDLFdBQVcsR0FBRyxTQUFTO0FBRS9CekMsT0FBTyxDQUFDMEMsU0FBUyxHQUFHO0VBSWxCdkMsTUFBTSxFQUFFVixTQUFTLENBQUNrRCxHQUFHO0VBSXJCdkMsU0FBUyxFQUFFWCxTQUFTLENBQUNtRCxNQUFNO0VBSTNCdkMsUUFBUSxFQUFFWixTQUFTLENBQUNvRCxJQUFJO0VBSXhCdkMsT0FBTyxFQUFFYixTQUFTLENBQUNxRCxJQUFJO0VBSXZCdkMsUUFBUSxFQUFFZCxTQUFTLENBQUNzRCxNQUFNO0VBSTFCdkMsWUFBWSxFQUFFZixTQUFTLENBQUN1RCxJQUFJO0VBSTVCdkMsSUFBSSxFQUFFaEIsU0FBUyxDQUFDa0QsR0FBRztFQUluQmpDLE1BQU0sRUFBRWpCLFNBQVMsQ0FBQ2tELEdBQUc7RUFJckJoQyxPQUFPLEVBQUVsQixTQUFTLENBQUN1RDtBQUNyQixDQUFDO0FBRURoRCxPQUFPLENBQUNpRCxZQUFZLEdBQUc7RUFDckI5QyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxTQUFTLEVBQUU4QyxTQUFTO0VBQ3BCN0MsUUFBUSxFQUFFLEtBQUs7RUFDZkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsUUFBUSxFQUFFLENBQUM7RUFDWEMsWUFBWSxFQUFFMEMsU0FBUztFQUN2QnpDLElBQUksRUFBRXlDLFNBQVM7RUFDZnhDLE1BQU0sRUFBRSxRQUFRO0VBQ2hCQyxPQUFPLEVBQUU7QUFDWCxDQUFDO0FBRUQsSUFBTXdDLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxLQUFvQixFQUFLO0VBQzVDLElBQUlDLFNBQVMsR0FBR0MsS0FBSyxDQUFDQyxJQUFJLENBQ3hCQyxRQUFRLENBQUNDLHNCQUFzQixJQUFBekIsTUFBQSxDQUFJbEMsTUFBTSxhQUFVLENBQ3JELENBQUM7RUFDRHVELFNBQVMsR0FBR0EsU0FBUyxDQUFDSyxNQUFNLENBQzFCLFVBQUNDLENBQWlCO0lBQUEsT0FBS0EsQ0FBQyxDQUFDQyxPQUFPLENBQUN6QyxLQUFLLEtBQUssTUFBTTtFQUFBLENBQ25ELENBQUM7RUFDRCxJQUFJa0MsU0FBUyxJQUFJQSxTQUFTLENBQUNRLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckMsSUFBTUMsYUFBYSxHQUFHVCxTQUFTLENBQUMsQ0FBQyxDQUFnQjtJQUNqRCxJQUFNVSxVQUFVLEdBQUdELGFBQWEsQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBZ0I7SUFDM0QsSUFBSUQsVUFBVSxDQUFDSCxPQUFPLENBQUNyRCxRQUFRLEtBQUssR0FBRyxFQUFFO01BQ3ZDdUQsYUFBYSxDQUFDRixPQUFPLENBQUN6QyxLQUFLLEdBQUcsTUFBTTtNQUNwQzJDLGFBQWEsQ0FBQ3pDLEtBQUssQ0FBQ0csU0FBUyxHQUFHLDBCQUEwQjtNQUMxRHVDLFVBQVUsQ0FBQzFDLEtBQUssQ0FBQ0MsT0FBTyxHQUFHLEdBQUc7TUFDOUJ5QyxVQUFVLENBQUMxQyxLQUFLLENBQUNFLFVBQVUsR0FBRyxRQUFRO01BRXRDdUMsYUFBYSxDQUFDekMsS0FBSyxDQUFDSSxVQUFVLEdBQzVCLG1FQUFtRTtNQUNyRXNDLFVBQVUsQ0FBQzFDLEtBQUssQ0FBQ0ksVUFBVSxHQUN6QixtRUFBbUU7SUFDdkU7RUFDRjtFQUVBLElBQUl3QyxRQUFhO0VBRWpCLElBQVF0RCxPQUFPLEdBQTBDeUMsS0FBSyxDQUF0RHpDLE9BQU87SUFBRUgsWUFBWSxHQUE0QjRDLEtBQUssQ0FBN0M1QyxZQUFZO0lBQUVFLE1BQU0sR0FBb0IwQyxLQUFLLENBQS9CMUMsTUFBTTtJQUFLRSxVQUFVLEdBQUFDLHdCQUFBLENBQUt1QyxLQUFLLEVBQUFjLFVBQUE7RUFDOUQsSUFBTUMsU0FBUyxHQUFHWCxRQUFRLENBQUMxQixhQUFhLENBQUMsS0FBSyxDQUFDO0VBQy9DcUMsU0FBUyxDQUFDL0QsU0FBUyxNQUFBNEIsTUFBQSxDQUFNbEMsTUFBTSxhQUFVO0VBQ3pDcUUsU0FBUyxDQUFDUCxPQUFPLENBQUNsRCxNQUFNLEdBQUdBLE1BQU07RUFDakMsSUFBSUYsWUFBWSxFQUFFO0lBQ2hCQSxZQUFZLENBQUMsQ0FBQyxDQUFDNEQsV0FBVyxDQUFDRCxTQUFTLENBQUM7RUFDdkMsQ0FBQyxNQUFNO0lBQ0xYLFFBQVEsQ0FBQ2EsSUFBSSxDQUFDRCxXQUFXLENBQUNELFNBQVMsQ0FBQztFQUN0QztFQUVBLElBQU1HLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFBLEVBQVM7SUFDekIzQyxVQUFVLENBQUMsWUFBTTtNQUNmLElBQU00QyxRQUFRLEdBQUdqQixLQUFLLENBQUNDLElBQUksQ0FDekJDLFFBQVEsQ0FBQ0Msc0JBQXNCLElBQUF6QixNQUFBLENBQUlsQyxNQUFNLGFBQVUsQ0FDckQsQ0FBcUI7TUFDckJ5RSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxVQUFDQyxPQUFPLEVBQUVDLEtBQUssRUFBSztRQUtuQ0QsT0FBTyxDQUFDcEQsS0FBSyxDQUFDQyxPQUFPLEdBQUcsR0FBRztRQUMzQm1ELE9BQU8sQ0FBQ3BELEtBQUssQ0FBQ0csU0FBUyxxQkFBQVEsTUFBQSxDQUNyQixFQUFFLElBQUl1QyxRQUFRLENBQUNWLE1BQU0sR0FBRyxDQUFDLEdBQUdhLEtBQUssQ0FBQyxXQUM1QjtNQUNWLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDUixDQUFDO0VBRURKLFlBQVksQ0FBQyxDQUFDO0VBRWQsSUFBTW5ELEtBQUssR0FBRyxTQUFSQSxLQUFLQSxDQUFBLEVBQVM7SUFDbEIsSUFBSVIsT0FBTyxFQUFFO01BQ1hBLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7SUFDQWdCLFVBQVUsQ0FBQyxZQUFNO01BQ2YsSUFBTWdELGFBQWEsR0FBR25GLFFBQVEsQ0FBQ29GLHNCQUFzQixDQUFDVCxTQUFTLENBQUM7TUFDaEUsSUFBSVEsYUFBYSxJQUFJUixTQUFTLENBQUNVLFVBQVUsRUFBRTtRQUN6Q1YsU0FBUyxDQUFDVSxVQUFVLENBQUNDLFdBQVcsQ0FBQ1gsU0FBUyxDQUFDO1FBQzNDRyxZQUFZLENBQUMsQ0FBQztNQUNoQjtJQUNGLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDVCxDQUFDO0VBRUQ5RSxRQUFRLENBQUN1RixNQUFNLENBQ2I1RixLQUFBLENBQUEyQyxhQUFBLENBQUM5QixPQUFPLEVBQUErQixRQUFBO0lBQ043QixHQUFHLEVBQUUsU0FBTEEsR0FBR0EsQ0FBR3VFLE9BQU8sRUFBSztNQUNoQlIsUUFBUSxHQUFHUSxPQUFPO0lBQ3BCLENBQUU7SUFDRjlELE9BQU8sRUFBRVEsS0FBTTtJQUNmVCxNQUFNLEVBQUVBO0VBQU8sR0FDWEUsVUFBVSxDQUNmLENBQUMsRUFDRnVELFNBQ0YsQ0FBQztFQUVELE9BQU87SUFDTGEsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtNQUNiLElBQUlmLFFBQVEsRUFBRTtRQUNaQSxRQUFRLENBQUM5QyxLQUFLLENBQUMsQ0FBQztNQUNsQjtJQUNGO0VBQ0YsQ0FBQztBQUNILENBQUM7QUFFRHBCLE9BQU8sQ0FBQ3lFLE9BQU8sQ0FDYixVQUFDOUQsTUFBK0QsRUFBSztFQUNuRVYsT0FBTyxDQUFDVSxNQUFNLENBQUMsR0FBRyxVQUFDdUUsTUFBOEIsRUFBSztJQUNwRCxJQUFJQyxJQUFJLEdBQUc7TUFBRXhFLE1BQU0sRUFBTkE7SUFBTyxDQUFrQjtJQUN0QyxJQUFJLE9BQU91RSxNQUFNLEtBQUssUUFBUSxFQUFFO01BQzlCQyxJQUFJLEdBQUc7UUFBRTVFLE9BQU8sRUFBRTJFLE1BQU07UUFBRXZFLE1BQU0sRUFBTkE7TUFBTyxDQUFDO0lBQ3BDLENBQUMsTUFBTTtNQUNMd0UsSUFBSSxHQUFHRCxNQUFNO0lBQ2Y7SUFDQSxPQUFPOUIsV0FBVyxDQUFBZ0MsYUFBQSxDQUFBQSxhQUFBLEtBQ2JELElBQUk7TUFDUHhFLE1BQU0sRUFBTkE7SUFBTSxFQUNQLENBQUM7RUFDSixDQUFDO0FBQ0gsQ0FDRixDQUFDO0FBRUQsZUFBZVYsT0FBTyIsImlnbm9yZUxpc3QiOltdfQ==