UNPKG

tb-react-live-chat-loader

Version:

Implement live chat in your react app without taking a performance hit.

212 lines (199 loc) 32 kB
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; } import React, { useEffect, useState } from 'react'; import useChat from "../../hooks/useChat"; import useWindowHeight from "../../hooks/useWindowHeight"; const styles = { wrapper: { borderRadius: '55px', height: '60px', width: '60px', bottom: '40px', boxShadow: 'rgba(0, 0, 0, 0.1) 0px 4px 7px', position: 'fixed', right: '40px', top: 'auto', borderStyle: 'none', transition: 'box-shadow 250ms ease 0s, opacity 0.4s ease 0s, transform 0.2s ease-in-out 0s' }, button: { appearance: 'none', alignItems: 'center', bottom: '0px', display: 'block', justifyContent: 'center', position: 'relative', userSelect: 'none', zIndex: 999, color: 'white', cursor: 'pointer', minWidth: '60px', WebkitTapHighlightColor: 'transparent', height: '60px', lineHeight: '60px', borderRadius: '120px', margin: '0px', outline: 'none', padding: '0px', borderStyle: 'none', transition: 'background-color 200ms linear 0s, transform 200ms linear 0s' }, icon: { alignItems: 'center', color: 'white', cursor: 'pointer', display: 'flex', height: '100%', WebkitBoxPack: 'center', justifyContent: 'center', pointerEvents: 'none', position: 'absolute', textIndent: '-99999px', top: '0px', width: '60px', willChange: 'opacity, transform', left: 'auto', right: '0px', opacity: '1 !important', transition: 'opacity 80ms linear 0s, transform 160ms linear 0s' }, close: { WebkitBoxAlign: 'center', alignItems: 'center', color: 'white', cursor: 'pointer', display: 'flex', height: '100%', WebkitBoxPack: 'center', justifyContent: 'center', pointerEvents: 'none', position: 'absolute', textIndent: '-99999px', top: '0px', width: '60px', willChange: 'opacity, transform', left: 'auto', right: '0px', transition: 'opacity 80ms linear 0s, transform 160ms linear 0s' } }; const getIcon = icon => { switch (icon) { case 'message': return /*#__PURE__*/React.createElement("svg", { width: "24", height: "22", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React.createElement("path", { d: "M20.347 20.871l-.003-.05c0 .017.001.034.003.05zm-.243-4.278a2 2 0 0 1 .513-1.455c1.11-1.226 1.383-2.212 1.383-4.74C22 5.782 18.046 2 13.125 2h-2.25C5.954 2 2 5.78 2 10.399c0 4.675 4.01 8.626 8.875 8.626h2.25c.834 0 1.606-.207 3.212-.798a2 2 0 0 1 1.575.083l2.355 1.161-.163-2.878zM10.875 0h2.25C19.13 0 24 4.656 24 10.399c0 2.6-.25 4.257-1.9 6.08l.243 4.279c.072.845-.807 1.471-1.633 1.162l-3.682-1.816c-1.212.446-2.527.921-3.903.921h-2.25C4.869 21.025 0 16.142 0 10.4 0 4.656 4.869 0 10.875 0z", fill: "#FFF" })); case 'antenna': return /*#__PURE__*/React.createElement("svg", { width: "28", height: "26", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React.createElement("path", { d: "M14.002 12a3.01 3.01 0 0 0-3.015 3c0 1.654 1.353 3 3.015 3a3.01 3.01 0 0 0 3.014-3c0-1.654-1.353-3-3.014-3m-1.005 7.9c-2.29-.465-4.019-2.485-4.019-4.9 0-2.757 2.254-5 5.024-5s5.023 2.243 5.023 5c0 2.415-1.729 4.435-4.019 4.9V25c0 .552-.45 1-1.004 1a1.003 1.003 0 0 1-1.005-1v-5.1zm9.36-7.345c-.393 0-.768-.232-.928-.617A8.019 8.019 0 0 0 14.001 7a8.018 8.018 0 0 0-7.426 4.936c-.213.51-.8.753-1.314.54a1 1 0 0 1-.543-1.307A10.024 10.024 0 0 1 14 5c4.078 0 7.722 2.422 9.284 6.17a.998.998 0 0 1-.927 1.385M1.005 10.637a1.005 1.005 0 0 1-.928-1.384C2.422 3.632 7.887 0 14.001 0c6.111 0 11.576 3.629 13.922 9.246a.998.998 0 0 1-.542 1.307 1.006 1.006 0 0 1-1.313-.54C24.033 5.146 19.298 2 14.001 2 8.703 2 3.965 5.148 1.933 10.02c-.16.385-.535.617-.928.617", fill: "#FFF", fillRule: "evenodd" })); case 'search': return /*#__PURE__*/React.createElement("svg", { width: "23", height: "24", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React.createElement("path", { d: "M15.79 15.46C17.184 13.982 18 12.07 18 10a8 8 0 1 0-8 8c1.676 0 3.24-.544 4.578-1.488l.659-.465.554-.588zm6.41 6.326a.999.999 0 0 1-.002 1.412.999.999 0 0 1-1.412.002l-5.095-5.094C14.064 19.256 12.142 19.997 10 20c-5.515.008-10.008-4.485-10-10C.008 4.485 4.485.008 10 0c5.515-.008 10.008 4.485 10 10-.004 2.652-1.105 5-2.794 6.791l4.994 4.995zM14 9c0-1.654-1.346-3-3-3a1 1 0 0 1 0-2c2.757 0 5 2.243 5 5a1 1 0 0 1-2 0z", fill: "#FFF" })); case 'question': return /*#__PURE__*/React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "52", height: "52" }, /*#__PURE__*/React.createElement("path", { id: "a", d: "M27.031 32h-2.488v-2.046c0-.635.077-1.21.232-1.72.154-.513.366-.972.639-1.381.272-.41.58-.779.923-1.109.345-.328.694-.652 1.049-.97l.995-.854a6.432 6.432 0 0 0 1.475-1.568c.39-.59.585-1.329.585-2.216 0-.635-.117-1.203-.355-1.703a3.7 3.7 0 0 0-.96-1.263 4.305 4.305 0 0 0-1.401-.783A5.324 5.324 0 0 0 26 16.114c-1.28 0-2.316.375-3.11 1.124-.795.75-1.286 1.705-1.475 2.865L19 19.693c.356-1.772 1.166-3.165 2.434-4.176C22.701 14.507 24.26 14 26.107 14c.947 0 1.842.131 2.682.392.84.262 1.57.648 2.185 1.16a5.652 5.652 0 0 1 1.475 1.892c.368.75.551 1.602.551 2.556 0 .728-.083 1.364-.248 1.909a5.315 5.315 0 0 1-.693 1.467 6.276 6.276 0 0 1-1.048 1.176c-.403.351-.83.71-1.28 1.073-.498.387-.918.738-1.26 1.057a4.698 4.698 0 0 0-.836 1.006 3.847 3.847 0 0 0-.462 1.176c-.095.432-.142.955-.142 1.568V32zM26 37a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z", fill: "#FFF", fillRule: "evenodd" })); case 'beacon': return /*#__PURE__*/React.createElement("svg", { width: "30", height: "30", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React.createElement("path", { d: "M26.244 21.523l-4.356-4.355a7.192 7.192 0 0 0 0-4.345l4.356-4.355a12.98 12.98 0 0 1 0 13.055zm-.4 3.215l-1.1 1.1a.557.557 0 0 1-.786 0l-4.884-4.884a7.27 7.27 0 0 0 1.885-1.886l4.885 4.885a.55.55 0 0 1 0 .785zM8.471 26.236l4.355-4.354a7.197 7.197 0 0 0 4.347 0l4.355 4.354a12.983 12.983 0 0 1-13.057 0zm-2.43-.398a.556.556 0 0 1-.786 0l-1.1-1.1a.556.556 0 0 1 0-.786l4.884-4.884a7.275 7.275 0 0 0 1.887 1.886L6.04 25.838zm-2.285-4.315a12.98 12.98 0 0 1 0-13.055l4.355 4.354a7.192 7.192 0 0 0 0 4.347l-4.355 4.354zm.399-16.27l1.1-1.1a.554.554 0 0 1 .785 0l4.886 4.884a7.27 7.27 0 0 0-1.887 1.885L4.155 6.039a.556.556 0 0 1 0-.786zm17.373-1.5l-4.355 4.355a7.229 7.229 0 0 0-4.347 0L8.471 3.754a12.99 12.99 0 0 1 13.057 0zm-1.305 11.242A5.228 5.228 0 0 1 15 20.217a5.228 5.228 0 0 1-5.224-5.222A5.228 5.228 0 0 1 15 9.773a5.23 5.23 0 0 1 5.223 5.222zm3.735-10.842a.556.556 0 0 1 .786 0l1.1 1.1a.553.553 0 0 1 0 .786l-4.884 4.883a7.302 7.302 0 0 0-1.886-1.885l4.884-4.884zm3.688 2.786c.23-.39.362-.83.362-1.293 0-.683-.266-1.325-.75-1.807l-1.098-1.1a2.555 2.555 0 0 0-3.101-.387 14.985 14.985 0 0 0-16.125.004c-.973-.548-2.284-.426-3.093.383l-1.101 1.1a2.533 2.533 0 0 0-.387 3.1 14.97 14.97 0 0 0 0 16.114 2.553 2.553 0 0 0 .387 3.099l1.1 1.1A2.549 2.549 0 0 0 5.649 28a2.55 2.55 0 0 0 1.293-.361A14.961 14.961 0 0 0 15 30.002a14.97 14.97 0 0 0 8.059-2.363c.398.234.844.36 1.292.36.655 0 1.31-.25 1.809-.747l1.099-1.1a2.531 2.531 0 0 0 .387-3.1 14.963 14.963 0 0 0 0-16.113z", fill: "#FFF", fillRule: "evenodd" })); case 'close': default: return /*#__PURE__*/React.createElement("svg", { width: 14, height: 14, xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React.createElement("path", { d: "M13.707.293a.999.999 0 0 0-1.414 0L7 5.586 1.707.293A.999.999 0 1 0 .293 1.707L5.586 7 .293 12.293a.999.999 0 1 0 1.414 1.414L7 8.414l5.293 5.293a.997.997 0 0 0 1.414 0 .999.999 0 0 0 0-1.414L8.414 7l5.293-5.293a.999.999 0 0 0 0-1.414", fill: "#FFF", fillRule: "evenodd" })); } }; const HelpScout = ({ color = '#976ad4', icon = 'beacon', zIndex = '1050', horizontalPosition = 'left' }) => { const [state, loadChat] = useChat({ loadWhenIdle: true }); const windowHeight = useWindowHeight(); const [positionStyles, setPositionStyles] = useState({ opacity: 0, visibility: 'hidden' }); useEffect(() => { setPositionStyles({ bottom: windowHeight < 740 ? '10px' : '40px', right: horizontalPosition === 'left' ? 'auto' : windowHeight < 740 ? '20px' : '40px', left: horizontalPosition === 'right' ? 'auto' : windowHeight < 740 ? '20px' : '40px' }); }, [windowHeight]); if (state === 'complete') { return null; } return /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread(_objectSpread({}, styles.wrapper), positionStyles), {}, { zIndex: Number(zIndex) }) }, /*#__PURE__*/React.createElement("button", { role: "button", "aria-label": "Load Chat", "aria-busy": "true", "aria-live": "polite", onClick: () => loadChat({ open: true }), onMouseEnter: () => loadChat({ open: false }), style: _objectSpread(_objectSpread({}, styles.button), {}, { backgroundColor: color }) }, /*#__PURE__*/React.createElement("span", { style: _objectSpread(_objectSpread({}, styles.icon), {}, { transform: state === 'initial' ? 'rotate(0deg) scale(1)' : 'rotate(30deg) scale(0)' }) }, getIcon(icon)), /*#__PURE__*/React.createElement("span", { style: _objectSpread(_objectSpread({}, styles.close), {}, { opacity: state === 'initial' ? 0 : 1, transform: state === 'initial' ? 'rotate(30deg) scale(0)' : 'rotate(0deg) scale(1)' }) }, getIcon('close')))); }; export default HelpScout; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0hlbHBTY291dC9pbmRleC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZUNoYXQiLCJ1c2VXaW5kb3dIZWlnaHQiLCJzdHlsZXMiLCJ3cmFwcGVyIiwiYm9yZGVyUmFkaXVzIiwiaGVpZ2h0Iiwid2lkdGgiLCJib3R0b20iLCJib3hTaGFkb3ciLCJwb3NpdGlvbiIsInJpZ2h0IiwidG9wIiwiYm9yZGVyU3R5bGUiLCJ0cmFuc2l0aW9uIiwiYnV0dG9uIiwiYXBwZWFyYW5jZSIsImFsaWduSXRlbXMiLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiLCJ1c2VyU2VsZWN0IiwiekluZGV4IiwiY29sb3IiLCJjdXJzb3IiLCJtaW5XaWR0aCIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwibGluZUhlaWdodCIsIm1hcmdpbiIsIm91dGxpbmUiLCJwYWRkaW5nIiwiaWNvbiIsIldlYmtpdEJveFBhY2siLCJwb2ludGVyRXZlbnRzIiwidGV4dEluZGVudCIsIndpbGxDaGFuZ2UiLCJsZWZ0Iiwib3BhY2l0eSIsImNsb3NlIiwiV2Via2l0Qm94QWxpZ24iLCJnZXRJY29uIiwiSGVscFNjb3V0IiwiaG9yaXpvbnRhbFBvc2l0aW9uIiwic3RhdGUiLCJsb2FkQ2hhdCIsImxvYWRXaGVuSWRsZSIsIndpbmRvd0hlaWdodCIsInBvc2l0aW9uU3R5bGVzIiwic2V0UG9zaXRpb25TdHlsZXMiLCJ2aXNpYmlsaXR5IiwiTnVtYmVyIiwib3BlbiIsImJhY2tncm91bmRDb2xvciIsInRyYW5zZm9ybSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUErQkMsU0FBL0IsRUFBMENDLFFBQTFDLFFBQTBELE9BQTFEO0FBRUEsT0FBT0MsT0FBUDtBQUNBLE9BQU9DLGVBQVA7QUFFQSxNQUFNQyxNQUtMLEdBQUc7QUFDRkMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BDLElBQUFBLFlB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QixNQUFNLENBQUNrQyxLQURQO0FBRUhELE1BQUFBLE9BQU8sRUFBRU0sS0FBSyxLQUFLLFNBQVYsR0FBc0IsQ0FBdEIsR0FBMEIsQ0FGaEM7QUFHSFUsTUFBQUEsU0FBUyxFQUNQVixLQUFLLEtBQUssU0FBVixHQUNJLHdCQURKLEdBRUk7QUFOSDtBQURQLEtBVUdILE9BQU8sQ0FBQyxPQUFELENBVlYsQ0F2QkYsQ0FQRixDQURGO0FBOENELENBakZEOztBQW1GQSxlQUFlQyxTQUFmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHVzZUNoYXQgZnJvbSAnLi4vLi4vaG9va3MvdXNlQ2hhdCdcbmltcG9ydCB1c2VXaW5kb3dIZWlnaHQgZnJvbSAnLi4vLi4vaG9va3MvdXNlV2luZG93SGVpZ2h0J1xuXG5jb25zdCBzdHlsZXM6IHtcbiAgd3JhcHBlcjogQ1NTUHJvcGVydGllc1xuICBidXR0b246IENTU1Byb3BlcnRpZXNcbiAgaWNvbjogQ1NTUHJvcGVydGllc1xuICBjbG9zZTogQ1NTUHJvcGVydGllc1xufSA9IHtcbiAgd3JhcHBlcjoge1xuICAgIGJvcmRlclJhZGl1czogJzU1cHgnLFxuICAgIGhlaWdodDogJzYwcHgnLFxuICAgIHdpZHRoOiAnNjBweCcsXG4gICAgYm90dG9tOiAnNDBweCcsXG4gICAgYm94U2hhZG93OiAncmdiYSgwLCAwLCAwLCAwLjEpIDBweCA0cHggN3B4JyxcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICByaWdodDogJzQwcHgnLFxuICAgIHRvcDogJ2F1dG8nLFxuICAgIGJvcmRlclN0eWxlOiAnbm9uZScsXG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICdib3gtc2hhZG93IDI1MG1zIGVhc2UgMHMsIG9wYWNpdHkgMC40cyBlYXNlIDBzLCB0cmFuc2Zvcm0gMC4ycyBlYXNlLWluLW91dCAwcydcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgYXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJvdHRvbTogJzBweCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHpJbmRleDogOTk5LFxuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG1pbldpZHRoOiAnNjBweCcsXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgaGVpZ2h0OiAnNjBweCcsXG4gICAgbGluZUhlaWdodDogJzYwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzEyMHB4JyxcbiAgICBtYXJnaW46ICcwcHgnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBwYWRkaW5nOiAnMHB4JyxcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnLFxuICAgIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGxpbmVhciAwcywgdHJhbnNmb3JtIDIwMG1zIGxpbmVhciAwcydcbiAgfSxcbiAgaWNvbjoge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBXZWJraXRCb3hQYWNrOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRleHRJbmRlbnQ6ICctOTk5OTlweCcsXG4gICAgdG9wOiAnMHB4JyxcbiAgICB3aWR0aDogJzYwcHgnLFxuICAgIHdpbGxDaGFuZ2U6ICdvcGFjaXR5LCB0cmFuc2Zvcm0nLFxuICAgIGxlZnQ6ICdhdXRvJyxcbiAgICByaWdodDogJzBweCcsXG4gICAgb3BhY2l0eTogJzEgIWltcG9ydGFudCcsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgODBtcyBsaW5lYXIgMHMsIHRyYW5zZm9ybSAxNjBtcyBsaW5lYXIgMHMnXG4gIH0sXG4gIGNsb3NlOiB7XG4gICAgV2Via2l0Qm94QWxpZ246ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBXZWJraXRCb3hQYWNrOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRleHRJbmRlbnQ6ICctOTk5OTlweCcsXG4gICAgdG9wOiAnMHB4JyxcbiAgICB3aWR0aDogJzYwcHgnLFxuICAgIHdpbGxDaGFuZ2U6ICdvcGFjaXR5LCB0cmFuc2Zvcm0nLFxuICAgIGxlZnQ6ICdhdXRvJyxcbiAgICByaWdodDogJzBweCcsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgODBtcyBsaW5lYXIgMHMsIHRyYW5zZm9ybSAxNjBtcyBsaW5lYXIgMHMnXG4gIH1cbn1cblxudHlwZSBIZWxwU2NvdXRJY29uID1cbiAgfCAnbWVzc2FnZSdcbiAgfCAnYW50ZW5uYSdcbiAgfCAnc2VhcmNoJ1xuICB8ICdxdWVzdGlvbidcbiAgfCAnYmVhY29uJ1xuICB8ICdjbG9zZSdcblxuY29uc3QgZ2V0SWNvbiA9IChpY29uOiBIZWxwU2NvdXRJY29uKTogSlNYLkVsZW1lbnQgPT4ge1xuICBzd2l0Y2ggKGljb24pIHtcbiAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjIyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTIwLjM0NyAyMC44NzFsLS4wMDMtLjA1YzAgLjAxNy4wMDEuMDM0LjAwMy4wNXptLS4yNDMtNC4yNzhhMiAyIDAgMCAxIC41MTMtMS40NTVjMS4xMS0xLjIyNiAxLjM4My0yLjIxMiAxLjM4My00Ljc0QzIyIDUuNzgyIDE4LjA0NiAyIDEzLjEyNSAyaC0yLjI1QzUuOTU0IDIgMiA1Ljc4IDIgMTAuMzk5YzAgNC42NzUgNC4wMSA4LjYyNiA4Ljg3NSA4LjYyNmgyLjI1Yy44MzQgMCAxLjYwNi0uMjA3IDMuMjEyLS43OThhMiAyIDAgMCAxIDEuNTc1LjA4M2wyLjM1NSAxLjE2MS0uMTYzLTIuODc4ek0xMC44NzUgMGgyLjI1QzE5LjEzIDAgMjQgNC42NTYgMjQgMTAuMzk5YzAgMi42LS4yNSA0LjI1Ny0xLjkgNi4wOGwuMjQzIDQuMjc5Yy4wNzIuODQ1LS44MDcgMS40NzEtMS42MzMgMS4xNjJsLTMuNjgyLTEuODE2Yy0xLjIxMi40NDYtMi41MjcuOTIxLTMuOTAzLjkyMWgtMi4yNUM0Ljg2OSAyMS4wMjUgMCAxNi4xNDIgMCAxMC40IDAgNC42NTYgNC44NjkgMCAxMC44NzUgMHpcIlxuICAgICAgICAgICAgZmlsbD1cIiNGRkZcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKVxuICAgIGNhc2UgJ2FudGVubmEnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMjZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTQuMDAyIDEyYTMuMDEgMy4wMSAwIDAgMC0zLjAxNSAzYzAgMS42NTQgMS4zNTMgMyAzLjAxNSAzYTMuMDEgMy4wMSAwIDAgMCAzLjAxNC0zYzAtMS42NTQtMS4zNTMtMy0zLjAxNC0zbS0xLjAwNSA3LjljLTIuMjktLjQ2NS00LjAxOS0yLjQ4NS00LjAxOS00LjkgMC0yLjc1NyAyLjI1NC01IDUuMDI0LTVzNS4wMjMgMi4yNDMgNS4wMjMgNWMwIDIuNDE1LTEuNzI5IDQuNDM1LTQuMDE5IDQuOVYyNWMwIC41NTItLjQ1IDEtMS4wMDQgMWExLjAwMyAxLjAwMyAwIDAgMS0xLjAwNS0xdi01LjF6bTkuMzYtNy4zNDVjLS4zOTMgMC0uNzY4LS4yMzItLjkyOC0uNjE3QTguMDE5IDguMDE5IDAgMCAwIDE0LjAwMSA3YTguMDE4IDguMDE4IDAgMCAwLTcuNDI2IDQuOTM2Yy0uMjEzLjUxLS44Ljc1My0xLjMxNC41NGExIDEgMCAwIDEtLjU0My0xLjMwN0ExMC4wMjQgMTAuMDI0IDAgMCAxIDE0IDVjNC4wNzggMCA3LjcyMiAyLjQyMiA5LjI4NCA2LjE3YS45OTguOTk4IDAgMCAxLS45MjcgMS4zODVNMS4wMDUgMTAuNjM3YTEuMDA1IDEuMDA1IDAgMCAxLS45MjgtMS4zODRDMi40MjIgMy42MzIgNy44ODcgMCAxNC4wMDEgMGM2LjExMSAwIDExLjU3NiAzLjYyOSAxMy45MjIgOS4yNDZhLjk5OC45OTggMCAwIDEtLjU0MiAxLjMwNyAxLjAwNiAxLjAwNiAwIDAgMS0xLjMxMy0uNTRDMjQuMDMzIDUuMTQ2IDE5LjI5OCAyIDE0LjAwMSAyIDguNzAzIDIgMy45NjUgNS4xNDggMS45MzMgMTAuMDJjLS4xNi4zODUtLjUzNS42MTctLjkyOC42MTdcIlxuICAgICAgICAgICAgZmlsbD1cIiNGRkZcIlxuICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIClcbiAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjIzXCIgaGVpZ2h0PVwiMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTUuNzkgMTUuNDZDMTcuMTg0IDEzLjk4MiAxOCAxMi4wNyAxOCAxMGE4IDggMCAxIDAtOCA4YzEuNjc2IDAgMy4yNC0uNTQ0IDQuNTc4LTEuNDg4bC42NTktLjQ2NS41NTQtLjU4OHptNi40MSA2LjMyNmEuOTk5Ljk5OSAwIDAgMS0uMDAyIDEuNDEyLjk5OS45OTkgMCAwIDEtMS40MTIuMDAybC01LjA5NS01LjA5NEMxNC4wNjQgMTkuMjU2IDEyLjE0MiAxOS45OTcgMTAgMjBjLTUuNTE1LjAwOC0xMC4wMDgtNC40ODUtMTAtMTBDLjAwOCA0LjQ4NSA0LjQ4NS4wMDggMTAgMGM1LjUxNS0uMDA4IDEwLjAwOCA0LjQ4NSAxMCAxMC0uMDA0IDIuNjUyLTEuMTA1IDUtMi43OTQgNi43OTFsNC45OTQgNC45OTV6TTE0IDljMC0xLjY1NC0xLjM0Ni0zLTMtM2ExIDEgMCAwIDEgMC0yYzIuNzU3IDAgNSAyLjI0MyA1IDVhMSAxIDAgMCAxLTIgMHpcIlxuICAgICAgICAgICAgZmlsbD1cIiNGRkZcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKVxuICAgIGNhc2UgJ3F1ZXN0aW9uJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTJcIiBoZWlnaHQ9XCI1MlwiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBpZD1cImFcIlxuICAgICAgICAgICAgZD1cIk0yNy4wMzEgMzJoLTIuNDg4di0yLjA0NmMwLS42MzUuMDc3LTEuMjEuMjMyLTEuNzIuMTU0LS41MTMuMzY2LS45NzIuNjM5LTEuMzgxLjI3Mi0uNDEuNTgtLjc3OS45MjMtMS4xMDkuMzQ1LS4zMjguNjk0LS42NTIgMS4wNDktLjk3bC45OTUtLjg1NGE2LjQzMiA2LjQzMiAwIDAgMCAxLjQ3NS0xLjU2OGMuMzktLjU5LjU4NS0xLjMyOS41ODUtMi4yMTYgMC0uNjM1LS4xMTctMS4yMDMtLjM1NS0xLjcwM2EzLjcgMy43IDAgMCAwLS45Ni0xLjI2MyA0LjMwNSA0LjMwNSAwIDAgMC0xLjQwMS0uNzgzQTUuMzI0IDUuMzI0IDAgMCAwIDI2IDE2LjExNGMtMS4yOCAwLTIuMzE2LjM3NS0zLjExIDEuMTI0LS43OTUuNzUtMS4yODYgMS43MDUtMS40NzUgMi44NjVMMTkgMTkuNjkzYy4zNTYtMS43NzIgMS4xNjYtMy4xNjUgMi40MzQtNC4xNzZDMjIuNzAxIDE0LjUwNyAyNC4yNiAxNCAyNi4xMDcgMTRjLjk0NyAwIDEuODQyLjEzMSAyLjY4Mi4zOTIuODQuMjYyIDEuNTcuNjQ4IDIuMTg1IDEuMTZhNS42NTIgNS42NTIgMCAwIDEgMS40NzUgMS44OTJjLjM2OC43NS41NTEgMS42MDIuNTUxIDIuNTU2IDAgLjcyOC0uMDgzIDEuMzY0LS4yNDggMS45MDlhNS4zMTUgNS4zMTUgMCAwIDEtLjY5MyAxLjQ2NyA2LjI3NiA2LjI3NiAwIDAgMS0xLjA0OCAxLjE3NmMtLjQwMy4zNTEtLjgzLjcxLTEuMjggMS4wNzMtLjQ5OC4zODctLjkxOC43MzgtMS4yNiAxLjA1N2E0LjY5OCA0LjY5OCAwIDAgMC0uODM2IDEuMDA2IDMuODQ3IDMuODQ3IDAgMCAwLS40NjIgMS4xNzZjLS4wOTUuNDMyLS4xNDIuOTU1LS4xNDIgMS41NjhWMzJ6TTI2IDM3YTEuNSAxLjUgMCAxIDEgMC0zIDEuNSAxLjUgMCAwIDEgMCAzelwiXG4gICAgICAgICAgICBmaWxsPVwiI0ZGRlwiXG4gICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKVxuICAgIGNhc2UgJ2JlYWNvbic6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3ZnIHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIzMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk0yNi4yNDQgMjEuNTIzbC00LjM1Ni00LjM1NWE3LjE5MiA3LjE5MiAwIDAgMCAwLTQuMzQ1bDQuMzU2LTQuMzU1YTEyLjk4IDEyLjk4IDAgMCAxIDAgMTMuMDU1em0tLjQgMy4yMTVsLTEuMSAxLjFhLjU1Ny41NTcgMCAwIDEtLjc4NiAwbC00Ljg4NC00Ljg4NGE3LjI3IDcuMjcgMCAwIDAgMS44ODUtMS44ODZsNC44ODUgNC44ODVhLjU1LjU1IDAgMCAxIDAgLjc4NXpNOC40NzEgMjYuMjM2bDQuMzU1LTQuMzU0YTcuMTk3IDcuMTk3IDAgMCAwIDQuMzQ3IDBsNC4zNTUgNC4zNTRhMTIuOTgzIDEyLjk4MyAwIDAgMS0xMy4wNTcgMHptLTIuNDMtLjM5OGEuNTU2LjU1NiAwIDAgMS0uNzg2IDBsLTEuMS0xLjFhLjU1Ni41NTYgMCAwIDEgMC0uNzg2bDQuODg0LTQuODg0YTcuMjc1IDcuMjc1IDAgMCAwIDEuODg3IDEuODg2TDYuMDQgMjUuODM4em0tMi4yODUtNC4zMTVhMTIuOTggMTIuOTggMCAwIDEgMC0xMy4wNTVsNC4zNTUgNC4zNTRhNy4xOTIgNy4xOTIgMCAwIDAgMCA0LjM0N2wtNC4zNTUgNC4zNTR6bS4zOTktMTYuMjdsMS4xLTEuMWEuNTU0LjU1NCAwIDAgMSAuNzg1IDBsNC44ODYgNC44ODRhNy4yNyA3LjI3IDAgMCAwLTEuODg3IDEuODg1TDQuMTU1IDYuMDM5YS41NTYuNTU2IDAgMCAxIDAtLjc4NnptMTcuMzczLTEuNWwtNC4zNTUgNC4zNTVhNy4yMjkgNy4yMjkgMCAwIDAtNC4zNDcgMEw4LjQ3MSAzLjc1NGExMi45OSAxMi45OSAwIDAgMSAxMy4wNTcgMHptLTEuMzA1IDExLjI0MkE1LjIyOCA1LjIyOCAwIDAgMSAxNSAyMC4yMTdhNS4yMjggNS4yMjggMCAwIDEtNS4yMjQtNS4yMjJBNS4yMjggNS4yMjggMCAwIDEgMTUgOS43NzNhNS4yMyA1LjIzIDAgMCAxIDUuMjIzIDUuMjIyem0zLjczNS0xMC44NDJhLjU1Ni41NTYgMCAwIDEgLjc4NiAwbDEuMSAxLjFhLjU1My41NTMgMCAwIDEgMCAuNzg2bC00Ljg4NCA0Ljg4M2E3LjMwMiA3LjMwMiAwIDAgMC0xLjg4Ni0xLjg4NWw0Ljg4NC00Ljg4NHptMy42ODggMi43ODZjLjIzLS4zOS4zNjItLjgzLjM2Mi0xLjI5MyAwLS42ODMtLjI2Ni0xLjMyNS0uNzUtMS44MDdsLTEuMDk4LTEuMWEyLjU1NSAyLjU1NSAwIDAgMC0zLjEwMS0uMzg3IDE0Ljk4NSAxNC45ODUgMCAwIDAtMTYuMTI1LjAwNGMtLjk3My0uNTQ4LTIuMjg0LS40MjYtMy4wOTMuMzgzbC0xLjEwMSAxLjFhMi41MzMgMi41MzMgMCAwIDAtLjM4NyAzLjEgMTQuOTcgMTQuOTcgMCAwIDAgMCAxNi4xMTQgMi41NTMgMi41NTMgMCAwIDAgLjM4NyAzLjA5OWwxLjEgMS4xQTIuNTQ5IDIuNTQ5IDAgMCAwIDUuNjQ5IDI4YTIuNTUgMi41NSAwIDAgMCAxLjI5My0uMzYxQTE0Ljk2MSAxNC45NjEgMCAwIDAgMTUgMzAuMDAyYTE0Ljk3IDE0Ljk3IDAgMCAwIDguMDU5LTIuMzYzYy4zOTguMjM0Ljg0NC4zNiAxLjI5Mi4zNi42NTUgMCAxLjMxLS4yNSAxLjgwOS0uNzQ3bDEuMDk5LTEuMWEyLjUzMSAyLjUzMSAwIDAgMCAuMzg3LTMuMSAxNC45NjMgMTQuOTYzIDAgMCAwIDAtMTYuMTEzelwiXG4gICAgICAgICAgICBmaWxsPVwiI0ZGRlwiXG4gICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKVxuICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHN2ZyB3aWR0aD17MTR9IGhlaWdodD17MTR9IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk0xMy43MDcuMjkzYS45OTkuOTk5IDAgMCAwLTEuNDE0IDBMNyA1LjU4NiAxLjcwNy4yOTNBLjk5OS45OTkgMCAxIDAgLjI5MyAxLjcwN0w1LjU4NiA3IC4yOTMgMTIuMjkzYS45OTkuOTk5IDAgMSAwIDEuNDE0IDEuNDE0TDcgOC40MTRsNS4yOTMgNS4yOTNhLjk5Ny45OTcgMCAwIDAgMS40MTQgMCAuOTk5Ljk5OSAwIDAgMCAwLTEuNDE0TDguNDE0IDdsNS4yOTMtNS4yOTNhLjk5OS45OTkgMCAwIDAgMC0xLjQxNFwiXG4gICAgICAgICAgICBmaWxsPVwiI0ZGRlwiXG4gICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgKVxuICB9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNvbG9yPzogc3RyaW5nXG4gIGljb24/OiBIZWxwU2NvdXRJY29uXG4gIHpJbmRleDogc3RyaW5nXG4gIGhvcml6b250YWxQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0J1xufVxuXG5jb25zdCBIZWxwU2NvdXQgPSAoe1xuICBjb2xvciA9ICcjOTc2YWQ0JyxcbiAgaWNvbiA9ICdiZWFjb24nLFxuICB6SW5kZXggPSAnMTA1MCcsXG4gIGhvcml6b250YWxQb3NpdGlvbiA9ICdsZWZ0J1xufTogUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwgPT4ge1xuICBjb25zdCBbc3RhdGUsIGxvYWRDaGF0XSA9IHVzZUNoYXQoeyBsb2FkV2hlbklkbGU6IHRydWUgfSlcbiAgY29uc3Qgd2luZG93SGVpZ2h0ID0gdXNlV2luZG93SGVpZ2h0KClcbiAgY29uc3QgW3Bvc2l0aW9uU3R5bGVzLCBzZXRQb3NpdGlvblN0eWxlc10gPSB1c2VTdGF0ZTxDU1NQcm9wZXJ0aWVzPih7XG4gICAgb3BhY2l0eTogMCxcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UG9zaXRpb25TdHlsZXMoe1xuICAgICAgYm90dG9tOiB3aW5kb3dIZWlnaHQgPCA3NDAgPyAnMTBweCcgOiAnNDBweCcsXG4gICAgICByaWdodDpcbiAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnbGVmdCdcbiAgICAgICAgICA/ICdhdXRvJ1xuICAgICAgICAgIDogd2luZG93SGVpZ2h0IDwgNzQwXG4gICAgICAgICAgPyAnMjBweCdcbiAgICAgICAgICA6ICc0MHB4JyxcbiAgICAgIGxlZnQ6XG4gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiA9PT0gJ3JpZ2h0J1xuICAgICAgICAgID8gJ2F1dG8nXG4gICAgICAgICAgOiB3aW5kb3dIZWlnaHQgPCA3NDBcbiAgICAgICAgICA/ICcyMHB4J1xuICAgICAgICAgIDogJzQwcHgnXG4gICAgfSlcbiAgfSwgW3dpbmRvd0hlaWdodF0pXG5cbiAgaWYgKHN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgLi4uc3R5bGVzLndyYXBwZXIsXG4gICAgICAgIC4uLnBvc2l0aW9uU3R5bGVzLFxuICAgICAgICB6SW5kZXg6IE51bWJlcih6SW5kZXgpXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJMb2FkIENoYXRcIlxuICAgICAgICBhcmlhLWJ1c3k9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4gbG9hZENoYXQoeyBvcGVuOiB0cnVlIH0pfVxuICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IGxvYWRDaGF0KHsgb3BlbjogZmFsc2UgfSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgLi4uc3R5bGVzLmJ1dHRvbixcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnN0eWxlcy5pY29uLFxuICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICBzdGF0ZSA9PT0gJ2luaXRpYWwnXG4gICAgICAgICAgICAgICAgPyAncm90YXRlKDBkZWcpIHNjYWxlKDEpJ1xuICAgICAgICAgICAgICAgIDogJ3JvdGF0ZSgzMGRlZykgc2NhbGUoMCknXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtnZXRJY29uKGljb24pfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLnN0eWxlcy5jbG9zZSxcbiAgICAgICAgICAgIG9wYWNpdHk6IHN0YXRlID09PSAnaW5pdGlhbCcgPyAwIDogMSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgc3RhdGUgPT09ICdpbml0aWFsJ1xuICAgICAgICAgICAgICAgID8gJ3JvdGF0ZSgzMGRlZykgc2NhbGUoMCknXG4gICAgICAgICAgICAgICAgOiAncm90YXRlKDBkZWcpIHNjYWxlKDEpJ1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7Z2V0SWNvbignY2xvc2UnKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVscFNjb3V0XG4iXX0=