UNPKG

botframework-webchat-component

Version:
336 lines (334 loc) 79.9 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _createInstance = _interopRequireDefault(require("@emotion/css/create-instance")); var _botframeworkWebchatApi = require("botframework-webchat-api"); var _decorator = require("botframework-webchat-api/decorator"); var _botframeworkWebchatCore = require("botframework-webchat-core"); var _classnames = _interopRequireDefault(require("classnames")); var _markdownIt = _interopRequireDefault(require("markdown-it")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireWildcard(require("react")); var _reactSay = require("react-say"); var _createMiddleware = _interopRequireDefault(require("./Attachment/createMiddleware")); var _Dictation = _interopRequireDefault(require("./Dictation")); var _ErrorBox = _interopRequireDefault(require("./ErrorBox")); var _BypassSpeechSynthesisPonyfill = require("./hooks/internal/BypassSpeechSynthesisPonyfill"); var _UITracker = _interopRequireDefault(require("./hooks/internal/UITracker")); var _WebChatUIContext = _interopRequireDefault(require("./hooks/internal/WebChatUIContext")); var _useStyleSet3 = _interopRequireDefault(require("./hooks/useStyleSet")); var _createCoreMiddleware = _interopRequireDefault(require("./Middleware/Activity/createCoreMiddleware")); var _createCoreMiddleware2 = _interopRequireDefault(require("./Middleware/ActivityStatus/createCoreMiddleware")); var _createCoreMiddleware3 = _interopRequireDefault(require("./Middleware/AttachmentForScreenReader/createCoreMiddleware")); var _createCoreMiddleware4 = _interopRequireDefault(require("./Middleware/Avatar/createCoreMiddleware")); var _createCoreMiddleware5 = _interopRequireDefault(require("./Middleware/CardAction/createCoreMiddleware")); var _createScrollToEndButtonMiddleware = _interopRequireDefault(require("./Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware")); var _createCoreMiddleware6 = _interopRequireDefault(require("./Middleware/Toast/createCoreMiddleware")); var _createCoreMiddleware7 = _interopRequireDefault(require("./Middleware/TypingIndicator/createCoreMiddleware")); var _ActivityTreeComposer = _interopRequireDefault(require("./providers/ActivityTree/ActivityTreeComposer")); var _SendBoxComposer = _interopRequireDefault(require("./providers/internal/SendBox/SendBoxComposer")); var _ModalDialogComposer = _interopRequireDefault(require("./providers/ModalDialog/ModalDialogComposer")); var _useTheme = _interopRequireDefault(require("./providers/Theme/useTheme")); var _createMiddleware2 = _interopRequireDefault(require("./SendBox/createMiddleware")); var _createMiddleware3 = _interopRequireDefault(require("./SendBoxToolbar/createMiddleware")); var _createStyleSet = _interopRequireDefault(require("./Styles/createStyleSet")); var _addTargetBlankToHyperlinksMarkdown = _interopRequireDefault(require("./Utils/addTargetBlankToHyperlinksMarkdown")); var _createCSSKey = _interopRequireDefault(require("./Utils/createCSSKey")); var _downscaleImageToDataURL = _interopRequireDefault(require("./Utils/downscaleImageToDataURL")); var _mapMap = _interopRequireDefault(require("./Utils/mapMap")); var _excluded = ["activityMiddleware", "activityStatusMiddleware", "attachmentForScreenReaderMiddleware", "attachmentMiddleware", "avatarMiddleware", "cardActionMiddleware", "children", "extraStyleSet", "renderMarkdown", "scrollToEndButtonMiddleware", "sendBoxMiddleware", "sendBoxToolbarMiddleware", "styleOptions", "styleSet", "suggestedActionsAccessKey", "toastMiddleware", "typingIndicatorMiddleware", "webSpeechPonyfillFactory"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 _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; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } 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; } var useGetActivityByKey = _botframeworkWebchatApi.hooks.useGetActivityByKey, useReferenceGrammarID = _botframeworkWebchatApi.hooks.useReferenceGrammarID, useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions; var node_env = undefined || "production"; var emotionPool = {}; function styleSetToEmotionObjects(styleToEmotionObject, styleSet) { return (0, _mapMap.default)(styleSet, function (style, key) { return key === 'options' ? style : styleToEmotionObject(style); }); } var ComposerCoreUI = /*#__PURE__*/(0, _react.memo)(function (_ref) { var children = _ref.children; var _useStyleSet = (0, _useStyleSet3.default)(), _useStyleSet2 = _slicedToArray(_useStyleSet, 1), cssCustomProperties = _useStyleSet2[0].cssCustomProperties; var dictationOnError = (0, _react.useCallback)(function (err) { console.error(err); }, []); return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('webchat__css-custom-properties', cssCustomProperties) }, /*#__PURE__*/_react.default.createElement(_decorator.DecoratorComposer, null, /*#__PURE__*/_react.default.createElement(_ModalDialogComposer.default, null, /*#__PURE__*/_react.default.createElement(_SendBoxComposer.default, null, children, /*#__PURE__*/_react.default.createElement(_Dictation.default, { onError: dictationOnError }))))); }); ComposerCoreUI.displayName = 'ComposerCoreUI'; var ComposerCore = function ComposerCore(_ref2) { var children = _ref2.children, extraStyleSet = _ref2.extraStyleSet, nonce = _ref2.nonce, renderMarkdown = _ref2.renderMarkdown, styleSet = _ref2.styleSet, suggestedActionsAccessKey = _ref2.suggestedActionsAccessKey, webSpeechPonyfillFactory = _ref2.webSpeechPonyfillFactory; var _useState = (0, _react.useState)(), _useState2 = _slicedToArray(_useState, 2), dictateAbortable = _useState2[0], setDictateAbortable = _useState2[1]; var _useReferenceGrammarI = useReferenceGrammarID(), _useReferenceGrammarI2 = _slicedToArray(_useReferenceGrammarI, 1), referenceGrammarID = _useReferenceGrammarI2[0]; var _useStyleOptions = useStyleOptions(), _useStyleOptions2 = _slicedToArray(_useStyleOptions, 1), styleOptions = _useStyleOptions2[0]; var focusTranscriptCallbacksRef = (0, _react.useRef)([]); var internalMarkdownIt = (0, _react.useMemo)(function () { return new _markdownIt.default(); }, []); var scrollToCallbacksRef = (0, _react.useRef)([]); var scrollToEndCallbacksRef = (0, _react.useRef)([]); var internalRenderMarkdownInline = (0, _react.useMemo)(function () { return function (markdown) { var tree = internalMarkdownIt.parseInline(markdown); // TODO: Use "betterLink" plugin. // We should add rel="noopener noreferrer" and target="_blank" var patchedTree = (0, _addTargetBlankToHyperlinksMarkdown.default)(tree); return internalMarkdownIt.renderer.render(patchedTree); }; }, [internalMarkdownIt]); var styleToEmotionObject = (0, _react.useMemo)(function () { // Emotion doesn't hash with nonce. We need to provide the pooling mechanism. // 1. If 2 instances use different nonce, they should result in different hash; // 2. If 2 instances are being mounted, pooling will make sure we render only 1 set of <style> tags, instead of 2. var emotion = // Prefix "id-" to prevent object injection attack. emotionPool["id-".concat(nonce)] || (emotionPool["id-".concat(nonce)] = (0, _createInstance.default)({ key: "webchat--css-".concat((0, _createCSSKey.default)()), nonce: nonce })); return function (style) { return emotion.css(style); }; }, [nonce]); var patchedStyleSet = (0, _react.useMemo)(function () { return styleSetToEmotionObjects(styleToEmotionObject, _objectSpread(_objectSpread({}, styleSet || (0, _createStyleSet.default)(styleOptions)), extraStyleSet)); }, [extraStyleSet, styleOptions, styleSet, styleToEmotionObject]); var webSpeechPonyfill = (0, _react.useMemo)(function () { var ponyfill = webSpeechPonyfillFactory && webSpeechPonyfillFactory({ referenceGrammarID: referenceGrammarID }); var _ref3 = ponyfill || {}, speechSynthesis = _ref3.speechSynthesis, SpeechSynthesisUtterance = _ref3.SpeechSynthesisUtterance; return _objectSpread(_objectSpread({}, ponyfill), {}, { speechSynthesis: speechSynthesis || _BypassSpeechSynthesisPonyfill.speechSynthesis, SpeechSynthesisUtterance: SpeechSynthesisUtterance || _BypassSpeechSynthesisPonyfill.SpeechSynthesisUtterance }); }, [referenceGrammarID, webSpeechPonyfillFactory]); var scrollPositionObserversRef = (0, _react.useRef)([]); var dispatchScrollPosition = (0, _react.useCallback)(function (event) { return scrollPositionObserversRef.current.forEach(function (observer) { return observer(event); }); }, [scrollPositionObserversRef]); var observeScrollPosition = (0, _react.useCallback)(function (observer) { scrollPositionObserversRef.current = [].concat(_toConsumableArray(scrollPositionObserversRef.current), [observer]); return function () { scrollPositionObserversRef.current = scrollPositionObserversRef.current.filter(function (target) { return target !== observer; }); }; }, [scrollPositionObserversRef]); var transcriptFocusObserversRef = (0, _react.useRef)([]); var _useState3 = (0, _react.useState)(0), _useState4 = _slicedToArray(_useState3, 2), numTranscriptFocusObservers = _useState4[0], setNumTranscriptFocusObservers = _useState4[1]; var getActivityByKey = useGetActivityByKey(); var dispatchTranscriptFocusByActivityKey = (0, _react.useMemo)(function () { var prevActivityKey = Symbol(); return function (activityKey) { if (activityKey !== prevActivityKey) { prevActivityKey = activityKey; var event = { activity: getActivityByKey(activityKey) }; transcriptFocusObserversRef.current.forEach(function (observer) { return observer(event); }); } }; }, [getActivityByKey, transcriptFocusObserversRef]); var observeTranscriptFocus = (0, _react.useCallback)(function (observer) { transcriptFocusObserversRef.current = [].concat(_toConsumableArray(transcriptFocusObserversRef.current), [observer]); setNumTranscriptFocusObservers(transcriptFocusObserversRef.current.length); return function () { transcriptFocusObserversRef.current = transcriptFocusObserversRef.current.filter(function (target) { return target !== observer; }); setNumTranscriptFocusObservers(transcriptFocusObserversRef.current.length); }; }, [transcriptFocusObserversRef, setNumTranscriptFocusObservers]); var context = (0, _react.useMemo)(function () { return { dictateAbortable: dictateAbortable, dispatchScrollPosition: dispatchScrollPosition, dispatchTranscriptFocusByActivityKey: dispatchTranscriptFocusByActivityKey, focusTranscriptCallbacksRef: focusTranscriptCallbacksRef, internalMarkdownItState: [internalMarkdownIt], internalRenderMarkdownInline: internalRenderMarkdownInline, nonce: nonce, numTranscriptFocusObservers: numTranscriptFocusObservers, observeScrollPosition: observeScrollPosition, observeTranscriptFocus: observeTranscriptFocus, renderMarkdown: renderMarkdown, scrollToCallbacksRef: scrollToCallbacksRef, scrollToEndCallbacksRef: scrollToEndCallbacksRef, setDictateAbortable: setDictateAbortable, styleSet: patchedStyleSet, styleToEmotionObject: styleToEmotionObject, suggestedActionsAccessKey: suggestedActionsAccessKey, webSpeechPonyfill: webSpeechPonyfill }; }, [dictateAbortable, dispatchScrollPosition, dispatchTranscriptFocusByActivityKey, focusTranscriptCallbacksRef, internalMarkdownIt, internalRenderMarkdownInline, nonce, numTranscriptFocusObservers, observeScrollPosition, observeTranscriptFocus, patchedStyleSet, renderMarkdown, scrollToCallbacksRef, scrollToEndCallbacksRef, setDictateAbortable, styleToEmotionObject, suggestedActionsAccessKey, webSpeechPonyfill]); return /*#__PURE__*/_react.default.createElement(_reactSay.Composer, { ponyfill: webSpeechPonyfill }, /*#__PURE__*/_react.default.createElement(_WebChatUIContext.default.Provider, { value: context }, /*#__PURE__*/_react.default.createElement(ComposerCoreUI, null, children))); }; ComposerCore.defaultProps = { extraStyleSet: undefined, nonce: undefined, renderMarkdown: undefined, styleSet: undefined, suggestedActionsAccessKey: 'A a Å å', webSpeechPonyfillFactory: undefined }; ComposerCore.propTypes = { extraStyleSet: _propTypes.default.any, nonce: _propTypes.default.string, renderMarkdown: _propTypes.default.func, styleSet: _propTypes.default.any, suggestedActionsAccessKey: _propTypes.default.oneOfType([_propTypes.default.oneOf([false]), _propTypes.default.string]), webSpeechPonyfillFactory: _propTypes.default.func }; var Composer = function Composer(_ref4) { var activityMiddleware = _ref4.activityMiddleware, activityStatusMiddleware = _ref4.activityStatusMiddleware, attachmentForScreenReaderMiddleware = _ref4.attachmentForScreenReaderMiddleware, attachmentMiddleware = _ref4.attachmentMiddleware, avatarMiddleware = _ref4.avatarMiddleware, cardActionMiddleware = _ref4.cardActionMiddleware, children = _ref4.children, extraStyleSet = _ref4.extraStyleSet, renderMarkdown = _ref4.renderMarkdown, scrollToEndButtonMiddleware = _ref4.scrollToEndButtonMiddleware, sendBoxMiddlewareFromProps = _ref4.sendBoxMiddleware, sendBoxToolbarMiddlewareFromProps = _ref4.sendBoxToolbarMiddleware, styleOptions = _ref4.styleOptions, styleSet = _ref4.styleSet, suggestedActionsAccessKey = _ref4.suggestedActionsAccessKey, toastMiddleware = _ref4.toastMiddleware, typingIndicatorMiddleware = _ref4.typingIndicatorMiddleware, webSpeechPonyfillFactory = _ref4.webSpeechPonyfillFactory, composerProps = _objectWithoutProperties(_ref4, _excluded); var nonce = composerProps.nonce, onTelemetry = composerProps.onTelemetry; var theme = (0, _useTheme.default)(); var patchedActivityMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(activityMiddleware)), _toConsumableArray(theme.activityMiddleware), _toConsumableArray((0, _createCoreMiddleware.default)())); }, [activityMiddleware, theme.activityMiddleware]); var patchedActivityStatusMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(activityStatusMiddleware)), _toConsumableArray(theme.activityStatusMiddleware), _toConsumableArray((0, _createCoreMiddleware2.default)())); }, [activityStatusMiddleware, theme.activityStatusMiddleware]); var patchedAttachmentForScreenReaderMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(attachmentForScreenReaderMiddleware)), _toConsumableArray(theme.attachmentForScreenReaderMiddleware), _toConsumableArray((0, _createCoreMiddleware3.default)())); }, [attachmentForScreenReaderMiddleware, theme.attachmentForScreenReaderMiddleware]); var patchedAttachmentMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(attachmentMiddleware)), _toConsumableArray(theme.attachmentMiddleware), _toConsumableArray((0, _createMiddleware.default)())); }, [attachmentMiddleware, theme.attachmentMiddleware]); var patchedAvatarMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(avatarMiddleware)), _toConsumableArray(theme.avatarMiddleware), _toConsumableArray((0, _createCoreMiddleware4.default)())); }, [avatarMiddleware, theme.avatarMiddleware]); var patchedCardActionMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(cardActionMiddleware)), _toConsumableArray(theme.cardActionMiddleware), _toConsumableArray((0, _createCoreMiddleware5.default)())); }, [cardActionMiddleware, theme.cardActionMiddleware]); var patchedToastMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(toastMiddleware)), _toConsumableArray(theme.toastMiddleware), _toConsumableArray((0, _createCoreMiddleware6.default)())); }, [toastMiddleware, theme.toastMiddleware]); var patchedTypingIndicatorMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(typingIndicatorMiddleware)), _toConsumableArray(theme.typingIndicatorMiddleware), _toConsumableArray((0, _createCoreMiddleware7.default)())); }, [typingIndicatorMiddleware, theme.typingIndicatorMiddleware]); var defaultScrollToEndButtonMiddleware = (0, _react.useMemo)(function () { return (0, _createScrollToEndButtonMiddleware.default)(); }, []); var patchedScrollToEndButtonMiddleware = (0, _react.useMemo)(function () { return [].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(scrollToEndButtonMiddleware)), _toConsumableArray(theme.scrollToEndButtonMiddleware), _toConsumableArray(defaultScrollToEndButtonMiddleware)); }, [defaultScrollToEndButtonMiddleware, scrollToEndButtonMiddleware, theme.scrollToEndButtonMiddleware]); var patchedStyleOptions = (0, _react.useMemo)(function () { return _objectSpread(_objectSpread({}, theme.styleOptions), styleOptions); }, [styleOptions, theme.styleOptions]); var sendBoxMiddleware = (0, _react.useMemo)(function () { return Object.freeze([].concat(_toConsumableArray((0, _botframeworkWebchatApi.initSendBoxMiddleware)(sendBoxMiddlewareFromProps)), _toConsumableArray((0, _botframeworkWebchatApi.initSendBoxMiddleware)(theme.sendBoxMiddleware)), _toConsumableArray((0, _createMiddleware2.default)()))); }, [sendBoxMiddlewareFromProps, theme.sendBoxMiddleware]); var sendBoxToolbarMiddleware = (0, _react.useMemo)(function () { return Object.freeze([].concat(_toConsumableArray((0, _botframeworkWebchatApi.initSendBoxToolbarMiddleware)(sendBoxToolbarMiddlewareFromProps)), _toConsumableArray((0, _botframeworkWebchatApi.initSendBoxToolbarMiddleware)(theme.sendBoxToolbarMiddleware)), _toConsumableArray((0, _createMiddleware3.default)()))); }, [sendBoxToolbarMiddlewareFromProps, theme.sendBoxToolbarMiddleware]); return /*#__PURE__*/_react.default.createElement(_botframeworkWebchatApi.Composer, _extends({ activityMiddleware: patchedActivityMiddleware, activityStatusMiddleware: patchedActivityStatusMiddleware, attachmentForScreenReaderMiddleware: patchedAttachmentForScreenReaderMiddleware, attachmentMiddleware: patchedAttachmentMiddleware, avatarMiddleware: patchedAvatarMiddleware, cardActionMiddleware: patchedCardActionMiddleware, downscaleImageToDataURL: _downscaleImageToDataURL.default // Under dev server of create-react-app, "NODE_ENV" will be set to "development". , internalErrorBoxClass: node_env === 'development' ? _ErrorBox.default : undefined, nonce: nonce, scrollToEndButtonMiddleware: patchedScrollToEndButtonMiddleware, sendBoxMiddleware: sendBoxMiddleware, sendBoxToolbarMiddleware: sendBoxToolbarMiddleware, styleOptions: patchedStyleOptions, toastMiddleware: patchedToastMiddleware, typingIndicatorMiddleware: patchedTypingIndicatorMiddleware }, composerProps), /*#__PURE__*/_react.default.createElement(_ActivityTreeComposer.default, null, /*#__PURE__*/_react.default.createElement(ComposerCore, { extraStyleSet: extraStyleSet, nonce: nonce, renderMarkdown: renderMarkdown, styleSet: styleSet, suggestedActionsAccessKey: suggestedActionsAccessKey, webSpeechPonyfillFactory: webSpeechPonyfillFactory }, children, onTelemetry && /*#__PURE__*/_react.default.createElement(_UITracker.default, null)))); }; Composer.defaultProps = _objectSpread(_objectSpread(_objectSpread({}, _botframeworkWebchatApi.Composer.defaultProps), ComposerCore.defaultProps), {}, { children: undefined }); Composer.propTypes = _objectSpread(_objectSpread(_objectSpread({}, _botframeworkWebchatApi.Composer.propTypes), ComposerCore.propTypes), {}, { children: _propTypes.default.any }); var _default = Composer; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3JlYXRlSW5zdGFuY2UiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ib3RmcmFtZXdvcmtXZWJjaGF0QXBpIiwiX2RlY29yYXRvciIsIl9ib3RmcmFtZXdvcmtXZWJjaGF0Q29yZSIsIl9jbGFzc25hbWVzIiwiX21hcmtkb3duSXQiLCJfcHJvcFR5cGVzIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcmVhY3RTYXkiLCJfY3JlYXRlTWlkZGxld2FyZSIsIl9EaWN0YXRpb24iLCJfRXJyb3JCb3giLCJfQnlwYXNzU3BlZWNoU3ludGhlc2lzUG9ueWZpbGwiLCJfVUlUcmFja2VyIiwiX1dlYkNoYXRVSUNvbnRleHQiLCJfdXNlU3R5bGVTZXQzIiwiX2NyZWF0ZUNvcmVNaWRkbGV3YXJlIiwiX2NyZWF0ZUNvcmVNaWRkbGV3YXJlMiIsIl9jcmVhdGVDb3JlTWlkZGxld2FyZTMiLCJfY3JlYXRlQ29yZU1pZGRsZXdhcmU0IiwiX2NyZWF0ZUNvcmVNaWRkbGV3YXJlNSIsIl9jcmVhdGVTY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUiLCJfY3JlYXRlQ29yZU1pZGRsZXdhcmU2IiwiX2NyZWF0ZUNvcmVNaWRkbGV3YXJlNyIsIl9BY3Rpdml0eVRyZWVDb21wb3NlciIsIl9TZW5kQm94Q29tcG9zZXIiLCJfTW9kYWxEaWFsb2dDb21wb3NlciIsIl91c2VUaGVtZSIsIl9jcmVhdGVNaWRkbGV3YXJlMiIsIl9jcmVhdGVNaWRkbGV3YXJlMyIsIl9jcmVhdGVTdHlsZVNldCIsIl9hZGRUYXJnZXRCbGFua1RvSHlwZXJsaW5rc01hcmtkb3duIiwiX2NyZWF0ZUNTU0tleSIsIl9kb3duc2NhbGVJbWFnZVRvRGF0YVVSTCIsIl9tYXBNYXAiLCJfZXhjbHVkZWQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJhcHBseSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImV4Y2x1ZGVkIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzb3VyY2VTeW1ib2xLZXlzIiwiaW5kZXhPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwic291cmNlS2V5cyIsImtleXMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwiaXRlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJvIiwibWluTGVuIiwibiIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibGVuIiwiYXJyMiIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibmV4dCIsImRvbmUiLCJlcnIiLCJ1c2VHZXRBY3Rpdml0eUJ5S2V5IiwiaG9va3MiLCJ1c2VSZWZlcmVuY2VHcmFtbWFySUQiLCJ1c2VTdHlsZU9wdGlvbnMiLCJub2RlX2VudiIsInVuZGVmaW5lZCIsImVtb3Rpb25Qb29sIiwic3R5bGVTZXRUb0Vtb3Rpb25PYmplY3RzIiwic3R5bGVUb0Vtb3Rpb25PYmplY3QiLCJzdHlsZVNldCIsIm1hcE1hcCIsInN0eWxlIiwiQ29tcG9zZXJDb3JlVUkiLCJtZW1vIiwiX3JlZiIsImNoaWxkcmVuIiwiX3VzZVN0eWxlU2V0IiwidXNlU3R5bGVTZXQiLCJfdXNlU3R5bGVTZXQyIiwiY3NzQ3VzdG9tUHJvcGVydGllcyIsImRpY3RhdGlvbk9uRXJyb3IiLCJ1c2VDYWxsYmFjayIsImNvbnNvbGUiLCJlcnJvciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiRGVjb3JhdG9yQ29tcG9zZXIiLCJvbkVycm9yIiwiZGlzcGxheU5hbWUiLCJDb21wb3NlckNvcmUiLCJfcmVmMiIsImV4dHJhU3R5bGVTZXQiLCJub25jZSIsInJlbmRlck1hcmtkb3duIiwic3VnZ2VzdGVkQWN0aW9uc0FjY2Vzc0tleSIsIndlYlNwZWVjaFBvbnlmaWxsRmFjdG9yeSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImRpY3RhdGVBYm9ydGFibGUiLCJzZXREaWN0YXRlQWJvcnRhYmxlIiwiX3VzZVJlZmVyZW5jZUdyYW1tYXJJIiwiX3VzZVJlZmVyZW5jZUdyYW1tYXJJMiIsInJlZmVyZW5jZUdyYW1tYXJJRCIsIl91c2VTdHlsZU9wdGlvbnMiLCJfdXNlU3R5bGVPcHRpb25zMiIsInN0eWxlT3B0aW9ucyIsImZvY3VzVHJhbnNjcmlwdENhbGxiYWNrc1JlZiIsInVzZVJlZiIsImludGVybmFsTWFya2Rvd25JdCIsInVzZU1lbW8iLCJNYXJrZG93bkl0Iiwic2Nyb2xsVG9DYWxsYmFja3NSZWYiLCJzY3JvbGxUb0VuZENhbGxiYWNrc1JlZiIsImludGVybmFsUmVuZGVyTWFya2Rvd25JbmxpbmUiLCJtYXJrZG93biIsInRyZWUiLCJwYXJzZUlubGluZSIsInBhdGNoZWRUcmVlIiwiYWRkVGFyZ2V0QmxhbmtUb0h5cGVybGlua3NNYXJrZG93biIsInJlbmRlcmVyIiwicmVuZGVyIiwiZW1vdGlvbiIsImNvbmNhdCIsImNyZWF0ZUVtb3Rpb24iLCJjcmVhdGVDU1NLZXkiLCJjc3MiLCJwYXRjaGVkU3R5bGVTZXQiLCJjcmVhdGVTdHlsZVNldCIsIndlYlNwZWVjaFBvbnlmaWxsIiwicG9ueWZpbGwiLCJfcmVmMyIsInNwZWVjaFN5bnRoZXNpcyIsIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSIsImJ5cGFzc1NwZWVjaFN5bnRoZXNpcyIsIkJ5cGFzc1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSIsInNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmIiwiZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiIsImV2ZW50IiwiY3VycmVudCIsIm9ic2VydmVyIiwib2JzZXJ2ZVNjcm9sbFBvc2l0aW9uIiwidHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzUmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJudW1UcmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnMiLCJzZXROdW1UcmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnMiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwicHJldkFjdGl2aXR5S2V5IiwiYWN0aXZpdHlLZXkiLCJhY3Rpdml0eSIsIm9ic2VydmVUcmFuc2NyaXB0Rm9jdXMiLCJjb250ZXh0IiwiaW50ZXJuYWxNYXJrZG93bkl0U3RhdGUiLCJDb21wb3NlciIsIlByb3ZpZGVyIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIiwiZnVuYyIsIm9uZU9mVHlwZSIsIm9uZU9mIiwiX3JlZjQiLCJhY3Rpdml0eU1pZGRsZXdhcmUiLCJhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUiLCJhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSIsImF0dGFjaG1lbnRNaWRkbGV3YXJlIiwiYXZhdGFyTWlkZGxld2FyZSIsImNhcmRBY3Rpb25NaWRkbGV3YXJlIiwic2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlIiwic2VuZEJveE1pZGRsZXdhcmVGcm9tUHJvcHMiLCJzZW5kQm94TWlkZGxld2FyZSIsInNlbmRCb3hUb29sYmFyTWlkZGxld2FyZUZyb21Qcm9wcyIsInNlbmRCb3hUb29sYmFyTWlkZGxld2FyZSIsInRvYXN0TWlkZGxld2FyZSIsInR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUiLCJjb21wb3NlclByb3BzIiwib25UZWxlbWV0cnkiLCJ0aGVtZSIsInVzZVRoZW1lIiwicGF0Y2hlZEFjdGl2aXR5TWlkZGxld2FyZSIsInNpbmdsZVRvQXJyYXkiLCJjcmVhdGVEZWZhdWx0QWN0aXZpdHlNaWRkbGV3YXJlIiwicGF0Y2hlZEFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSIsImNyZWF0ZURlZmF1bHRBY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUiLCJwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUiLCJjcmVhdGVEZWZhdWx0QXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUiLCJwYXRjaGVkQXR0YWNobWVudE1pZGRsZXdhcmUiLCJjcmVhdGVEZWZhdWx0QXR0YWNobWVudE1pZGRsZXdhcmUiLCJwYXRjaGVkQXZhdGFyTWlkZGxld2FyZSIsImNyZWF0ZURlZmF1bHRBdmF0YXJNaWRkbGV3YXJlIiwicGF0Y2hlZENhcmRBY3Rpb25NaWRkbGV3YXJlIiwiY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlIiwicGF0Y2hlZFRvYXN0TWlkZGxld2FyZSIsImNyZWF0ZURlZmF1bHRUb2FzdE1pZGRsZXdhcmUiLCJwYXRjaGVkVHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSIsImNyZWF0ZURlZmF1bHRUeXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlIiwiZGVmYXVsdFNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSIsImNyZWF0ZURlZmF1bHRTY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUiLCJwYXRjaGVkU2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlIiwicGF0Y2hlZFN0eWxlT3B0aW9ucyIsImZyZWV6ZSIsImluaXRTZW5kQm94TWlkZGxld2FyZSIsImNyZWF0ZURlZmF1bHRTZW5kQm94TWlkZGxld2FyZSIsImluaXRTZW5kQm94VG9vbGJhck1pZGRsZXdhcmUiLCJjcmVhdGVEZWZhdWx0U2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlIiwiZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwiLCJpbnRlcm5hbEVycm9yQm94Q2xhc3MiLCJFcnJvckJveCIsIkFQSUNvbXBvc2VyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlcyI6WyIuLi9zcmMvQ29tcG9zZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVFbW90aW9uIGZyb20gJ0BlbW90aW9uL2Nzcy9jcmVhdGUtaW5zdGFuY2UnO1xuaW1wb3J0IHR5cGUge1xuICBDb21wb3NlclByb3BzIGFzIEFQSUNvbXBvc2VyUHJvcHMsXG4gIFNlbmRCb3hNaWRkbGV3YXJlLFxuICBTZW5kQm94VG9vbGJhck1pZGRsZXdhcmVcbn0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB7XG4gIENvbXBvc2VyIGFzIEFQSUNvbXBvc2VyLFxuICBob29rcyxcbiAgaW5pdFNlbmRCb3hNaWRkbGV3YXJlLFxuICBpbml0U2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlLFxuICBXZWJTcGVlY2hQb255ZmlsbEZhY3Rvcnlcbn0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB7IERlY29yYXRvckNvbXBvc2VyIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpL2RlY29yYXRvcic7XG5pbXBvcnQgeyBzaW5nbGVUb0FycmF5IH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBNYXJrZG93bkl0IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29tcG9zZXIgYXMgU2F5Q29tcG9zZXIgfSBmcm9tICdyZWFjdC1zYXknO1xuXG5pbXBvcnQgY3JlYXRlRGVmYXVsdEF0dGFjaG1lbnRNaWRkbGV3YXJlIGZyb20gJy4vQXR0YWNobWVudC9jcmVhdGVNaWRkbGV3YXJlJztcbmltcG9ydCBEaWN0YXRpb24gZnJvbSAnLi9EaWN0YXRpb24nO1xuaW1wb3J0IEVycm9yQm94IGZyb20gJy4vRXJyb3JCb3gnO1xuaW1wb3J0IHtcbiAgc3BlZWNoU3ludGhlc2lzIGFzIGJ5cGFzc1NwZWVjaFN5bnRoZXNpcyxcbiAgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIGFzIEJ5cGFzc1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVxufSBmcm9tICcuL2hvb2tzL2ludGVybmFsL0J5cGFzc1NwZWVjaFN5bnRoZXNpc1BvbnlmaWxsJztcbmltcG9ydCBVSVRyYWNrZXIgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC9VSVRyYWNrZXInO1xuaW1wb3J0IFdlYkNoYXRVSUNvbnRleHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC9XZWJDaGF0VUlDb250ZXh0JztcbmltcG9ydCB1c2VTdHlsZVNldCBmcm9tICcuL2hvb2tzL3VzZVN0eWxlU2V0JztcbmltcG9ydCBjcmVhdGVEZWZhdWx0QWN0aXZpdHlNaWRkbGV3YXJlIGZyb20gJy4vTWlkZGxld2FyZS9BY3Rpdml0eS9jcmVhdGVDb3JlTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdEFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSBmcm9tICcuL01pZGRsZXdhcmUvQWN0aXZpdHlTdGF0dXMvY3JlYXRlQ29yZU1pZGRsZXdhcmUnO1xuaW1wb3J0IGNyZWF0ZURlZmF1bHRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSBmcm9tICcuL01pZGRsZXdhcmUvQXR0YWNobWVudEZvclNjcmVlblJlYWRlci9jcmVhdGVDb3JlTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdEF2YXRhck1pZGRsZXdhcmUgZnJvbSAnLi9NaWRkbGV3YXJlL0F2YXRhci9jcmVhdGVDb3JlTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlIGZyb20gJy4vTWlkZGxld2FyZS9DYXJkQWN0aW9uL2NyZWF0ZUNvcmVNaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVEZWZhdWx0U2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlIGZyb20gJy4vTWlkZGxld2FyZS9TY3JvbGxUb0VuZEJ1dHRvbi9jcmVhdGVTY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUnO1xuaW1wb3J0IGNyZWF0ZURlZmF1bHRUb2FzdE1pZGRsZXdhcmUgZnJvbSAnLi9NaWRkbGV3YXJlL1RvYXN0L2NyZWF0ZUNvcmVNaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVEZWZhdWx0VHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSBmcm9tICcuL01pZGRsZXdhcmUvVHlwaW5nSW5kaWNhdG9yL2NyZWF0ZUNvcmVNaWRkbGV3YXJlJztcbmltcG9ydCBBY3Rpdml0eVRyZWVDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9BY3Rpdml0eVRyZWUvQWN0aXZpdHlUcmVlQ29tcG9zZXInO1xuaW1wb3J0IFNlbmRCb3hDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9pbnRlcm5hbC9TZW5kQm94L1NlbmRCb3hDb21wb3Nlcic7XG5pbXBvcnQgTW9kYWxEaWFsb2dDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9Nb2RhbERpYWxvZy9Nb2RhbERpYWxvZ0NvbXBvc2VyJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuL3Byb3ZpZGVycy9UaGVtZS91c2VUaGVtZSc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdFNlbmRCb3hNaWRkbGV3YXJlIGZyb20gJy4vU2VuZEJveC9jcmVhdGVNaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVEZWZhdWx0U2VuZEJveFRvb2xiYXJNaWRkbGV3YXJlIGZyb20gJy4vU2VuZEJveFRvb2xiYXIvY3JlYXRlTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlU3R5bGVTZXQgZnJvbSAnLi9TdHlsZXMvY3JlYXRlU3R5bGVTZXQnO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0T2YgfSBmcm9tICcuL3R5cGVzL0NvbnRleHRPZic7XG5pbXBvcnQgeyB0eXBlIEZvY3VzVHJhbnNjcmlwdEluaXQgfSBmcm9tICcuL3R5cGVzL2ludGVybmFsL0ZvY3VzVHJhbnNjcmlwdEluaXQnO1xuaW1wb3J0IGFkZFRhcmdldEJsYW5rVG9IeXBlcmxpbmtzTWFya2Rvd24gZnJvbSAnLi9VdGlscy9hZGRUYXJnZXRCbGFua1RvSHlwZXJsaW5rc01hcmtkb3duJztcbmltcG9ydCBjcmVhdGVDU1NLZXkgZnJvbSAnLi9VdGlscy9jcmVhdGVDU1NLZXknO1xuaW1wb3J0IGRvd25zY2FsZUltYWdlVG9EYXRhVVJMIGZyb20gJy4vVXRpbHMvZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwnO1xuaW1wb3J0IG1hcE1hcCBmcm9tICcuL1V0aWxzL21hcE1hcCc7XG5cbmNvbnN0IHsgdXNlR2V0QWN0aXZpdHlCeUtleSwgdXNlUmVmZXJlbmNlR3JhbW1hcklELCB1c2VTdHlsZU9wdGlvbnMgfSA9IGhvb2tzO1xuXG5jb25zdCBub2RlX2VudiA9IHByb2Nlc3MuZW52Lm5vZGVfZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WO1xuXG5jb25zdCBlbW90aW9uUG9vbCA9IHt9O1xuXG5mdW5jdGlvbiBzdHlsZVNldFRvRW1vdGlvbk9iamVjdHMoc3R5bGVUb0Vtb3Rpb25PYmplY3QsIHN0eWxlU2V0KSB7XG4gIHJldHVybiBtYXBNYXAoc3R5bGVTZXQsIChzdHlsZSwga2V5KSA9PiAoa2V5ID09PSAnb3B0aW9ucycgPyBzdHlsZSA6IHN0eWxlVG9FbW90aW9uT2JqZWN0KHN0eWxlKSkpO1xufVxuXG50eXBlIENvbXBvc2VyQ29yZVVJUHJvcHMgPSBSZWFkb25seTx7IGNoaWxkcmVuPzogUmVhY3ROb2RlIH0+O1xuXG5jb25zdCBDb21wb3NlckNvcmVVSSA9IG1lbW8oKHsgY2hpbGRyZW4gfTogQ29tcG9zZXJDb3JlVUlQcm9wcykgPT4ge1xuICBjb25zdCBbeyBjc3NDdXN0b21Qcm9wZXJ0aWVzIH1dID0gdXNlU3R5bGVTZXQoKTtcblxuICBjb25zdCBkaWN0YXRpb25PbkVycm9yID0gdXNlQ2FsbGJhY2soZXJyID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKCd3ZWJjaGF0X19jc3MtY3VzdG9tLXByb3BlcnRpZXMnLCBjc3NDdXN0b21Qcm9wZXJ0aWVzKX0+XG4gICAgICA8RGVjb3JhdG9yQ29tcG9zZXI+XG4gICAgICAgIDxNb2RhbERpYWxvZ0NvbXBvc2VyPlxuICAgICAgICAgIHsvKiBXaGVuIDxTZW5kQm94Q29tcG9zZXI+IGlzIGZpbmFsaXplZCwgaXQgd2lsbCBiZSB1c2luZyBhbiBpbmRlcGVuZGVudCBpbnN0YW5jZSB0aGF0IGxpdmVzIGluc2lkZSA8QmFzaWNTZW5kQm94Pi4gKi99XG4gICAgICAgICAgPFNlbmRCb3hDb21wb3Nlcj5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDxEaWN0YXRpb24gb25FcnJvcj17ZGljdGF0aW9uT25FcnJvcn0gLz5cbiAgICAgICAgICA8L1NlbmRCb3hDb21wb3Nlcj5cbiAgICAgICAgPC9Nb2RhbERpYWxvZ0NvbXBvc2VyPlxuICAgICAgPC9EZWNvcmF0b3JDb21wb3Nlcj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5Db21wb3NlckNvcmVVSS5kaXNwbGF5TmFtZSA9ICdDb21wb3NlckNvcmVVSSc7XG5cbnR5cGUgQ29tcG9zZXJDb3JlUHJvcHMgPSBSZWFkb25seTx7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBleHRyYVN0eWxlU2V0PzogYW55O1xuICBub25jZT86IHN0cmluZztcbiAgcmVuZGVyTWFya2Rvd24/OiAoXG4gICAgbWFya2Rvd246IHN0cmluZyxcbiAgICBuZXdMaW5lT3B0aW9uczogeyBtYXJrZG93blJlc3BlY3RDUkxGOiBib29sZWFuIH0sXG4gICAgbGlua09wdGlvbnM6IHsgZXh0ZXJuYWxMaW5rQWx0OiBzdHJpbmcgfVxuICApID0+IHN0cmluZztcbiAgc3R5bGVTZXQ/OiBhbnk7XG4gIHN1Z2dlc3RlZEFjdGlvbnNBY2Nlc3NLZXk/OiBib29sZWFuIHwgc3RyaW5nO1xuICB3ZWJTcGVlY2hQb255ZmlsbEZhY3Rvcnk/OiBXZWJTcGVlY2hQb255ZmlsbEZhY3Rvcnk7XG59PjtcblxuY29uc3QgQ29tcG9zZXJDb3JlID0gKHtcbiAgY2hpbGRyZW4sXG4gIGV4dHJhU3R5bGVTZXQsXG4gIG5vbmNlLFxuICByZW5kZXJNYXJrZG93bixcbiAgc3R5bGVTZXQsXG4gIHN1Z2dlc3RlZEFjdGlvbnNBY2Nlc3NLZXksXG4gIHdlYlNwZWVjaFBvbnlmaWxsRmFjdG9yeVxufTogQ29tcG9zZXJDb3JlUHJvcHMpID0+IHtcbiAgY29uc3QgW2RpY3RhdGVBYm9ydGFibGUsIHNldERpY3RhdGVBYm9ydGFibGVdID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW3JlZmVyZW5jZUdyYW1tYXJJRF0gPSB1c2VSZWZlcmVuY2VHcmFtbWFySUQoKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgZm9jdXNUcmFuc2NyaXB0Q2FsbGJhY2tzUmVmID0gdXNlUmVmPCgoaW5pdDogRm9jdXNUcmFuc2NyaXB0SW5pdCkgPT4gUHJvbWlzZTx2b2lkPilbXT4oW10pO1xuICBjb25zdCBpbnRlcm5hbE1hcmtkb3duSXQgPSB1c2VNZW1vKCgpID0+IG5ldyBNYXJrZG93bkl0KCksIFtdKTtcbiAgY29uc3Qgc2Nyb2xsVG9DYWxsYmFja3NSZWYgPSB1c2VSZWYoW10pO1xuICBjb25zdCBzY3JvbGxUb0VuZENhbGxiYWNrc1JlZiA9IHVzZVJlZihbXSk7XG5cbiAgY29uc3QgaW50ZXJuYWxSZW5kZXJNYXJrZG93bklubGluZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbWFya2Rvd24gPT4ge1xuICAgICAgY29uc3QgdHJlZSA9IGludGVybmFsTWFya2Rvd25JdC5wYXJzZUlubGluZShtYXJrZG93bik7XG5cbiAgICAgIC8vIFRPRE86IFVzZSBcImJldHRlckxpbmtcIiBwbHVnaW4uXG4gICAgICAvLyBXZSBzaG91bGQgYWRkIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBhbmQgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIGNvbnN0IHBhdGNoZWRUcmVlID0gYWRkVGFyZ2V0QmxhbmtUb0h5cGVybGlua3NNYXJrZG93bih0cmVlKTtcblxuICAgICAgcmV0dXJuIGludGVybmFsTWFya2Rvd25JdC5yZW5kZXJlci5yZW5kZXIocGF0Y2hlZFRyZWUpO1xuICAgIH0sXG4gICAgW2ludGVybmFsTWFya2Rvd25JdF1cbiAgKTtcblxuICBjb25zdCBzdHlsZVRvRW1vdGlvbk9iamVjdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIEVtb3Rpb24gZG9lc24ndCBoYXNoIHdpdGggbm9uY2UuIFdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgcG9vbGluZyBtZWNoYW5pc20uXG4gICAgLy8gMS4gSWYgMiBpbnN0YW5jZXMgdXNlIGRpZmZlcmVudCBub25jZSwgdGhleSBzaG91bGQgcmVzdWx0IGluIGRpZmZlcmVudCBoYXNoO1xuICAgIC8vIDIuIElmIDIgaW5zdGFuY2VzIGFyZSBiZWluZyBtb3VudGVkLCBwb29saW5nIHdpbGwgbWFrZSBzdXJlIHdlIHJlbmRlciBvbmx5IDEgc2V0IG9mIDxzdHlsZT4gdGFncywgaW5zdGVhZCBvZiAyLlxuICAgIGNvbnN0IGVtb3Rpb24gPVxuICAgICAgLy8gUHJlZml4IFwiaWQtXCIgdG8gcHJldmVudCBvYmplY3QgaW5qZWN0aW9uIGF0dGFjay5cbiAgICAgIGVtb3Rpb25Qb29sW2BpZC0ke25vbmNlfWBdIHx8XG4gICAgICAoZW1vdGlvblBvb2xbYGlkLSR7bm9uY2V9YF0gPSBjcmVhdGVFbW90aW9uKHsga2V5OiBgd2ViY2hhdC0tY3NzLSR7Y3JlYXRlQ1NTS2V5KCl9YCwgbm9uY2UgfSkpO1xuXG4gICAgcmV0dXJuIHN0eWxlID0+IGVtb3Rpb24uY3NzKHN0eWxlKTtcbiAgfSwgW25vbmNlXSk7XG5cbiAgY29uc3QgcGF0Y2hlZFN0eWxlU2V0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc3R5bGVTZXRUb0Vtb3Rpb25PYmplY3RzKHN0eWxlVG9FbW90aW9uT2JqZWN0LCB7XG4gICAgICAgIC4uLihzdHlsZVNldCB8fCBjcmVhdGVTdHlsZVNldChzdHlsZU9wdGlvbnMpKSxcbiAgICAgICAgLi4uZXh0cmFTdHlsZVNldFxuICAgICAgfSksXG4gICAgW2V4dHJhU3R5bGVTZXQsIHN0eWxlT3B0aW9ucywgc3R5bGVTZXQsIHN0eWxlVG9FbW90aW9uT2JqZWN0XVxuICApO1xuXG4gIGNvbnN0IHdlYlNwZWVjaFBvbnlmaWxsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcG9ueWZpbGwgPSB3ZWJTcGVlY2hQb255ZmlsbEZhY3RvcnkgJiYgd2ViU3BlZWNoUG9ueWZpbGxGYWN0b3J5KHsgcmVmZXJlbmNlR3JhbW1hcklEIH0pO1xuICAgIGNvbnN0IHsgc3BlZWNoU3ludGhlc2lzLCBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UgfSA9IHBvbnlmaWxsIHx8IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBvbnlmaWxsLFxuICAgICAgc3BlZWNoU3ludGhlc2lzOiBzcGVlY2hTeW50aGVzaXMgfHwgYnlwYXNzU3BlZWNoU3ludGhlc2lzLFxuICAgICAgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UgfHwgQnlwYXNzU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlXG4gICAgfTtcbiAgfSwgW3JlZmVyZW5jZUdyYW1tYXJJRCwgd2ViU3BlZWNoUG9ueWZpbGxGYWN0b3J5XSk7XG5cbiAgY29uc3Qgc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWYgPSB1c2VSZWYoW10pO1xuXG4gIGNvbnN0IGRpc3BhdGNoU2Nyb2xsUG9zaXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiBzY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZi5jdXJyZW50LmZvckVhY2gob2JzZXJ2ZXIgPT4gb2JzZXJ2ZXIoZXZlbnQpKSxcbiAgICBbc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWZdXG4gICk7XG5cbiAgY29uc3Qgb2JzZXJ2ZVNjcm9sbFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgb2JzZXJ2ZXIgPT4ge1xuICAgICAgc2Nyb2xsUG9zaXRpb25PYnNlcnZlcnNSZWYuY3VycmVudCA9IFsuLi5zY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZi5jdXJyZW50LCBvYnNlcnZlcl07XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHNjcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmLmN1cnJlbnQgPSBzY3JvbGxQb3NpdGlvbk9ic2VydmVyc1JlZi5jdXJyZW50LmZpbHRlcih0YXJnZXQgPT4gdGFyZ2V0ICE9PSBvYnNlcnZlcik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgW3Njcm9sbFBvc2l0aW9uT2JzZXJ2ZXJzUmVmXVxuICApO1xuXG4gIGNvbnN0IHRyYW5zY3JpcHRGb2N1c09ic2VydmVyc1JlZiA9IHVzZVJlZihbXSk7XG4gIGNvbnN0IFtudW1UcmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnMsIHNldE51bVRyYW5zY3JpcHRGb2N1c09ic2VydmVyc10gPSB1c2VTdGF0ZSgwKTtcblxuICBjb25zdCBnZXRBY3Rpdml0eUJ5S2V5ID0gdXNlR2V0QWN0aXZpdHlCeUtleSgpO1xuXG4gIGNvbnN0IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBwcmV2QWN0aXZpdHlLZXk6IHN0cmluZyB8IFN5bWJvbCB8IHVuZGVmaW5lZCA9IFN5bWJvbCgpO1xuXG4gICAgcmV0dXJuIGFjdGl2aXR5S2V5ID0+IHtcbiAgICAgIGlmIChhY3Rpdml0eUtleSAhPT0gcHJldkFjdGl2aXR5S2V5KSB7XG4gICAgICAgIHByZXZBY3Rpdml0eUtleSA9IGFjdGl2aXR5S2V5O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50ID0geyBhY3Rpdml0eTogZ2V0QWN0aXZpdHlCeUtleShhY3Rpdml0eUtleSkgfTtcblxuICAgICAgICB0cmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnNSZWYuY3VycmVudC5mb3JFYWNoKG9ic2VydmVyID0+IG9ic2VydmVyKGV2ZW50KSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2dldEFjdGl2aXR5QnlLZXksIHRyYW5zY3JpcHRGb2N1c09ic2VydmVyc1JlZl0pO1xuXG4gIGNvbnN0IG9ic2VydmVUcmFuc2NyaXB0Rm9jdXMgPSB1c2VDYWxsYmFjayhcbiAgICBvYnNlcnZlciA9PiB7XG4gICAgICB0cmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnNSZWYuY3VycmVudCA9IFsuLi50cmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnNSZWYuY3VycmVudCwgb2JzZXJ2ZXJdO1xuICAgICAgc2V0TnVtVHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzKHRyYW5zY3JpcHRGb2N1c09ic2VydmVyc1JlZi5jdXJyZW50Lmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRyYW5zY3JpcHRGb2N1c09ic2VydmVyc1JlZi5jdXJyZW50ID0gdHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzUmVmLmN1cnJlbnQuZmlsdGVyKHRhcmdldCA9PiB0YXJnZXQgIT09IG9ic2VydmVyKTtcbiAgICAgICAgc2V0TnVtVHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzKHRyYW5zY3JpcHRGb2N1c09ic2VydmVyc1JlZi5jdXJyZW50Lmxlbmd0aCk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgW3RyYW5zY3JpcHRGb2N1c09ic2VydmVyc1JlZiwgc2V0TnVtVHJhbnNjcmlwdEZvY3VzT2JzZXJ2ZXJzXVxuICApO1xuXG4gIGNvbnN0IGNvbnRleHQgPSB1c2VNZW1vPENvbnRleHRPZjx0eXBlb2YgV2ViQ2hhdFVJQ29udGV4dD4+KFxuICAgICgpID0+ICh7XG4gICAgICBkaWN0YXRlQWJvcnRhYmxlLFxuICAgICAgZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbixcbiAgICAgIGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSxcbiAgICAgIGZvY3VzVHJhbnNjcmlwdENhbGxiYWNrc1JlZixcbiAgICAgIGludGVybmFsTWFya2Rvd25JdFN0YXRlOiBbaW50ZXJuYWxNYXJrZG93bkl0XSxcbiAgICAgIGludGVybmFsUmVuZGVyTWFya2Rvd25JbmxpbmUsXG4gICAgICBub25jZSxcbiAgICAgIG51bVRyYW5zY3JpcHRGb2N1c09ic2VydmVycyxcbiAgICAgIG9ic2VydmVTY3JvbGxQb3NpdGlvbixcbiAgICAgIG9ic2VydmVUcmFuc2NyaXB0Rm9jdXMsXG4gICAgICByZW5kZXJNYXJrZG93bixcbiAgICAgIHNjcm9sbFRvQ2FsbGJhY2tzUmVmLFxuICAgICAgc2Nyb2xsVG9FbmRDYWxsYmFja3NSZWYsXG4gICAgICBzZXREaWN0YXRlQWJvcnRhYmxlLFxuICAgICAgc3R5bGVTZXQ6IHBhdGNoZWRTdHlsZVNldCxcbiAgICAgIHN0eWxlVG9FbW90aW9uT2JqZWN0LFxuICAgICAgc3VnZ2VzdGVkQWN0aW9uc0FjY2Vzc0tleSxcbiAgICAgIHdlYlNwZWVjaFBvbnlmaWxsXG4gICAgfSksXG4gICAgW1xuICAgICAgZGljdGF0ZUFib3J0YWJsZSxcbiAgICAgIGRpc3BhdGNoU2Nyb2xsUG9zaXRpb24sXG4gICAgICBkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXksXG4gICAgICBmb2N1c1RyYW5zY3JpcHRDYWxsYmFja3NSZWYsXG4gICAgICBpbnRlcm5hbE1hcmtkb3duSXQsXG4gICAgICBpbnRlcm5hbFJlbmRlck1hcmtkb3duSW5saW5lLFxuICAgICAgbm9uY2UsXG4gICAgICBudW1UcmFuc2NyaXB0Rm9jdXNPYnNlcnZlcnMsXG4gICAgICBvYnNlcnZlU2Nyb2xsUG9zaXRpb24sXG4gICAgICBvYnNlcnZlVHJhbnNjcmlwdEZvY3VzLFxuICAgICAgcGF0Y2hlZFN0eWxlU2V0LFxuICAgICAgcmVuZGVyTWFya2Rvd24sXG4gICAgICBzY3JvbGxUb0NhbGxiYWNrc1JlZixcbiAgICAgIHNjcm9sbFRvRW5kQ2FsbGJhY2tzUmVmLFxuICAgICAgc2V0RGljdGF0ZUFib3J0YWJsZSxcbiAgICAgIHN0eWxlVG9FbW90aW9uT2JqZWN0LFxuICAgICAgc3VnZ2VzdGVkQWN0aW9uc0FjY2Vzc0tleSxcbiAgICAgIHdlYlNwZWVjaFBvbnlmaWxsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFNheUNvbXBvc2VyIHBvbnlmaWxsPXt3ZWJTcGVlY2hQb255ZmlsbH0+XG4gICAgICA8V2ViQ2hhdFVJQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICAgIDxDb21wb3NlckNvcmVVST57Y2hpbGRyZW59PC9Db21wb3NlckNvcmVVST5cbiAgICAgIDwvV2ViQ2hhdFVJQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L1NheUNvbXBvc2VyPlxuICApO1xufTtcblxuQ29tcG9zZXJDb3JlLmRlZmF1bHRQcm9wcyA9IHtcbiAgZXh0cmFTdHlsZVNldDogdW5kZWZpbmVkLFxuICBub25jZTogdW5kZWZpbmVkLFxuICByZW5kZXJNYXJrZG93bjogdW5kZWZpbmVkLFxuICBzdHlsZVNldDogdW5kZWZpbmVkLFxuICBzdWdnZXN0ZWRBY3Rpb25zQWNjZXNzS2V5OiAnQSBhIMOFIMOlJyxcbiAgd2ViU3BlZWNoUG9ueWZpbGxGYWN0b3J5OiB1bmRlZmluZWRcbn07XG5cbkNvbXBvc2VyQ29yZS5wcm9wVHlwZXMgPSB7XG4gIGV4dHJhU3R5bGVTZXQ6IFByb3BUeXBlcy5hbnksXG4gIG5vbmNlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZW5kZXJNYXJrZG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIHN0eWxlU2V0OiBQcm9wVHlwZXMuYW55LFxuICBzdWdnZXN0ZWRBY3Rpb25zQWNjZXNzS2V5OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgd2ViU3BlZWNoUG9ueWZpbGxGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufTtcblxudHlwZSBDb21wb3NlclByb3BzID0gQVBJQ29tcG9zZXJQcm9wcyAmIENvbXBvc2VyQ29yZVByb3BzO1xuXG5jb25zdCBDb21wb3NlciA9ICh7XG4gIGFjdGl2aXR5TWlkZGxld2FyZSxcbiAgYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlLFxuICBhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSxcbiAgYXR0YWNobWVudE1pZGRsZXdhcmUsXG4gIGF2YXRhck1pZGRsZXdhcmUsXG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlLFxuICBjaGlsZHJlbixcbiAgZXh0cmFTdHlsZVNldCxcbiAgcmVuZGVyTWFya2Rvd24sXG4gIHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSxcbiAgc2VuZEJveE1pZGRsZXdhcmU6IHNlbmRCb3hNaWRkbGV3YXJlRnJvbVByb3BzLFxuICBzZW5kQm94VG9vbGJhck1pZGRsZXdhcmU6IHNlbmRCb3hUb29sYmFyTWlkZGxld2FyZUZyb21Qcm9wcyxcbiAgc3R5bGVPcHRpb25zLFxuICBzdHlsZVNldCxcbiAgc3VnZ2VzdGVkQWN0aW9uc0FjY2Vzc0tleSxcbiAgdG9hc3RNaWRkbGV3YXJlLFxuICB0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlLFxuICB3ZWJTcGVlY2hQb255ZmlsbEZhY3RvcnksXG4gIC4uLmNvbXBvc2VyUHJvcHNcbn06IENvbXBvc2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyBub25jZSwgb25UZWxlbWV0cnkgfSA9IGNvbXBvc2VyUHJvcHM7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcblxuICBjb25zdCBwYXRjaGVkQWN0aXZpdHlNaWRkbGV3YXJlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBbLi4uc2luZ2xlVG9BcnJheShhY3Rpdml0eU1pZGRsZXdhcmUpLCAuLi50aGVtZS5hY3Rpdml0eU1pZGRsZXdhcmUsIC4uLmNyZWF0ZURlZmF1bHRBY3Rpdml0eU1pZGRsZXdhcmUoKV0sXG4gICAgW2FjdGl2aXR5TWlkZGxld2FyZSwgdGhlbWUuYWN0aXZpdHlNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUgPSB1c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlKSxcbiAgICAgIC4uLnRoZW1lLmFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSxcbiAgICAgIC4uLmNyZWF0ZURlZmF1bHRBY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUoKVxuICAgIF0sXG4gICAgW2FjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSwgdGhlbWUuYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgLi4uc2luZ2xlVG9BcnJheShhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSksXG4gICAgICAuLi50aGVtZS5hdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSxcbiAgICAgIC4uLmNyZWF0ZURlZmF1bHRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSgpXG4gICAgXSxcbiAgICBbYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUsIHRoZW1lLmF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBdHRhY2htZW50TWlkZGxld2FyZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgLi4uc2luZ2xlVG9BcnJheShhdHRhY2htZW50TWlkZGxld2FyZSksXG4gICAgICAuLi50aGVtZS5hdHRhY2htZW50TWlkZGxld2FyZSxcbiAgICAgIC4uLmNyZWF0ZURlZmF1bHRBdHRhY2htZW50TWlkZGxld2FyZSgpXG4gICAgXSxcbiAgICBbYXR0YWNobWVudE1pZGRsZXdhcmUsIHRoZW1lLmF0dGFjaG1lbnRNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBdmF0YXJNaWRkbGV3YXJlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBbLi4uc2luZ2xlVG9BcnJheShhdmF0YXJNaWRkbGV3YXJlKSwgLi4udGhlbWUuYXZhdGFy